2012-02-07 20 views
15

Tengo algunos datos de salida de algunos comandos de Bash Shell. La salida está delimitada línea por línea con "\ n" o "\ 0". Me gustaría saber que hay alguna forma de canalizar la salida a Perl y procesar la línea de datos por línea dentro de Perl (como conectar el resultado a awk, pero en mi caso está en el contexto de Perl). Supongo que el comando puede ser algo como esto:¿Cómo pipetear la línea de salida del comando Bash Shell línea a Perl para procesamiento Regex?

Bash Shell command | perl -e 'some perl commands' | another Bash Shell command 

Supongamos que quiero sustituir todos ":" carácter a carácter "@" en una "línea por línea" (sin un cambio global, se me permite utilizar una condición, por ejemplo, línea impar o par, para determinar si la línea actual debería tener la sustitución o no), entonces, ¿cómo podría lograr esto?

Respuesta

20

Ver perlrun.

perl -lpe's/:/@/g'  # assumes \n as input record separator 
perl -0 -lpe's/:/@/g' # assumes \0 as input record separator 

perl -lne'if (0 == $. % 2) { s/:/@/g; print; }' # modify and print even lines 

Sí, Perl puede aparecer en cualquier lugar en una tubería, al igual que awk.

+0

Muchas gracias. Funciona. – user1129812

4

El cambio de línea de comando -p (si desea impresión automática) o -n (si no lo desea) hará lo que desee. El contenido de línea están en $ _ manera:

perl -pe's/\./\@/g'

habría una solución. En general, desea leer en el operador '<>' (diamante), que es el camino a seguir para los que no son vendedores.

+2

Esto también requiere el indicador -e si está escribiendo todo el programa en la línea de comandos. (De lo contrario, no podrá encontrar el script de Perl titulado "s /\./\@/ g") – SkryneSaver

Cuestiones relacionadas