Tengo 23,000 líneas, y necesito agregar el número 1
al final de cada línea.
¿Cómo puedo hacer esto?
En este momento:
[línea1]TEXTO
[línea2]TEXTO
Lo que quisiera:
[línea1]TEXTO1
[línea2]TEXTO1
Tengo 23,000 líneas, y necesito agregar el número 1
al final de cada línea.
¿Cómo puedo hacer esto?
En este momento:
[línea1]TEXTO
[línea2]TEXTO
Lo que quisiera:
[línea1]TEXTO1
[línea2]TEXTO1
Menú "Buscar" > "Reemplazar" (o Ctrl + H)
Establece "Buscar" en \r\n
Establece "Reemplazar con" en 1\r\n
Habilita "Expresión regular" o "Extendido"
Nota - "Expresión regular" es un superconjunto de "Extendido" por lo que en este caso en particular no importa cuál uses.
Haz clic en "Reemplazar todo"
Notas:
Lo anterior asume que estás editando un archivo de texto con saltos de línea de Windows, \r\n
.
Si estás usando archivos con diferentes saltos de línea puedes convertirlos a saltos de línea de Windows usando Menú "Editar" > "Conversión de EOL".
Si no estás trabajando con saltos de línea de Windows, y no deseas convertirlos, utiliza lo siguiente en su lugar:
Usa \n
en lugar de \r\n
para saltos de línea de Unix/OS X ("Buscar" es \n
, "Reemplazar con" es 1\n
)
Usa \r
en lugar de \r\n
para saltos de línea de Mac OS (hasta la versión 9) ("Buscar" es \r
, "Reemplazar con" es 1\r
)
Oh tienes razón ... :) Aún así, el archivo de texto podría tener otro tipo de codificación de salto de línea ;)
Otra opción es la característica de grabación y reproducción.
Capturas de pantalla
Escriba End, 1, ↓
Respuesta actualizada:
Pulsa Ctrl + H para abrir el cuadro de diálogo de Reemplazar.
Bajo modo de búsqueda, marca Expresión Regular.
Buscar:
$
Reemplazar por:
1
Luego pulsa en Reemplazar todo
Respuesta original
Pulsa Ctrl + H para abrir el cuadro de diálogo de Reemplazar.
Bajo modo de búsqueda, marca Expresión Regular
.
Buscar: ^.*$
Reemplazar por: ($0)1
Luego pulsa en Reemplazar todo
Explicación
Estás buscando la expresión regular ^.*$
, que básicamente es toda la línea. ^
marca el inicio de una línea, .*
incluye cualquier carácter cualquier número de veces y $
marca el final de la línea. Por lo tanto, esta expresión regular encuentra todo el contenido en cada línea.
Reemplazamos esta expresión con ($0)1
, siendo $0
la expresión encontrada, y añadiéndole un 1
.
Iba a decir esto también... ¿por qué toda la expresión reg regular compleja? esta responde perfectamente a la pregunta... ¿y por qué la votación negativa? ¿porque alguien simplemente no entendió que es una respuesta válida? O.o
Esto puede no ser práctico para 23,000 líneas (demasiado lento o de lo contrario (problemas de memoria debido a algoritmos del pintor Shlemiel?)). ¿Lo has intentado realmente con 23,000 líneas?
@PeterMortensen Horriblemente lento, pero el uso de memoria está bien (5 MB => 25 MB). El problema principal es que no parece manejar bien las longitudes de línea diferentes.
Modo Extendido.
Quería agregar un enfoque ligeramente diferente que no se menciona en otras respuestas: Modo Extendido.
Para cosas como esta, donde todo lo que te preocupa son \r
, \n
, \t
u otros incluidos en esta pequeña lista (aunque esa página parece estar "anticuada", así que no estoy 100% seguro de su veracidad) no hay razón para recurrir a una expresión regular completa.
Suelo usar el modo extendido de Notepad++ "a menudo" para ajustar el diseño de archivos, principalmente centrado en eliminar múltiples líneas vacías, espacios en blanco adicionales y otras rarezas diversas.
\r\n
para Windows\r
para versiones antiguas de MacOS (9 o anteriores)\n
para Unix o versiones más nuevas de MacOS (OS X o más recientes)1\r\n
para Windows1\r
para versiones antiguas de MacOS (9 o anteriores)1\n
para Unix o versiones más nuevas de MacOS (OS X o más recientes)
"La 'expresión regular' es un superconjunto de 'extendida', por lo que en este caso particular no importa cuál uses."
¿No debería ser \n
para Unix y \r
para versiones más antiguas de MacOS? Primer punto de Wikipedia: en.wikipedia.org/wiki/Newline#Representations
EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.
2 votos
Más interesante; ¿cómo asignarías números secuenciales a líneas secuenciales? :-)
1 votos
@CarlWitthoft Numerar las líneas con el paquete TextFX (TextFx > TextFx Tools > Insert Line Numbers) y luego mover los números de línea al final de la línea con una regexp.
2 votos
¿Si hay una línea vacía entre 2 líneas de texto, esa línea también debería recibir un 1?
0 votos
Este tipo de cosa es lo que hace que
sublime-text
sea tan poderoso, si no lo has usado. En sublime, simplemente esctrl+a
>ctrl+shift+L
>end
> Ahora tienes un cursor uniforme al final de cada línea. stackoverflow.com/questions/10709869/…4 votos
:%s/$/1/
. Oh wait, that's Vim. ;-) (Which is available for Windows as well.)1 votos
@DevSolar Alternativamente,
:g/$/norm A1
. O el más complejo pero más elegantegg$G$A1
. O incluso el indudablemente molestoggqqqqqA1j@qq@q
. Más de una forma de hacerlo :P0 votos
@CarlWitthoft, usa PowerShell:
$i=0; (gc example.txt) | % {$i++; "$($_)$i"} | sc example.txt
1 votos
Para todas las respuestas que están utilizando regex con variaciones de
\r
y\n
. Simplemente utiliza\R
(mayúscula), que coincidirá con secuencias de nueva línea unicode. Esto significa que no tendrás que preocuparte por la plataforma, etc. Entonces podrías reemplazarlo con1$0
. El único "pequeño problema" que veo es que la última línea no sería coincidente ya que no hay una nueva línea después de ella (Fin del Archivo). Por eso creo que usar$
es la mejor opción en este caso.0 votos
@dangph ¡Puaj! :-) . Soy fanático de bash, pero de todos modos se trata de configurar un "grep y reemplazar", así que aprecio la información.