2010-12-05 14 views
7

En un archivo, digamos xyz.txt quiero reemplazar el patrón de cualquier número seguido de un ejemplo de punto: 1., 2., 10., 11. etc. con un espacio en blanco. Cómo redactar un comando perl en la línea de comando para actuar en el archivo para hacer lo anterior, ¿cuál debería ser la expresión regular que se utilizará?Perl regex para actuar sobre un archivo desde la línea de comando

Por favor, ayuda Gracias.

Respuesta

4

respuesta (no probado):

perl -ipe "s/\d+\./ /g" xyz.txt 
+10

personalmente me gusta escribir 'perl -pie' porque entonces se deletrea una palabra, pero no importa. –

19

Esto tiene que ser un oneliner Perl?

perl -i -pe 's/\d+\./ /g' <fileName> 

Las opciones de línea de comandos Perl: -i se utiliza para especificar qué sucede con el archivo de entrada. Si no le da una extensión de archivo, el archivo original se pierde y se reemplaza por la salida de Perl munged. Por ejemplo, si tuviera esto:

perl -i.bak -pe 's/\d+\./ /g' <fileName> 

El archivo original se almacena con un sufijo .bak y <nomArchivo> sí contendría su salida.

El -p significa para encerrar su programa de Perl en un bucle de impresión que se ve ALGO así:

while ($_ = <>) { 
    <Your Perl one liner> 
    print "$_"; 
} 

Esta es una explicación algo simplificada de lo que está pasando. Puede ver el bucle real de perl haciendo un perldoc perlrun desde la línea de comando. La idea principal es que le permite actuar en cada línea de un archivo como sed o awk.

El -e simplemente contiene su comando Perl.

También se puede hacer la redirección de archivo demasiado:

perl -pe 's/\d+\./ /g' <xyz.txt> xyz.txt.out 
+0

+1 para señalar el uso muy útil de -i, para explicar la mecánica detrás de -p, y para mostrar la alternativa de redirección, todo además de responder correctamente la pregunta. – Olfan

+0

Use las comillas dobles "" para adjuntar la cadena de expresiones regulares si está utilizando Active Perl en Windows CMD, o no funcionará. Acabo de probar en mi línea de comandos de Windows 10. –

2

Tanto

perl -ipe "s/\d+\./ /g" xyz.txt 

y

perl -pie 

no se puede ejecutar en mi sistema.

uso el siguiente orden:

perl -i -pe 
Cuestiones relacionadas