2011-08-31 17 views

Respuesta

13

Mira -F en perlrun:

% echo "a:b:c" | perl -a -F: -ne 'print "$F[1]\n";' 
b 

Tenga en cuenta que el valor se toma como expresión regular, por lo que algunos delimitadores puede necesitar algún escape adicional:

% echo "a.b.c" | perl -a -F. -ne 'print "$F[1]\n";' 

% echo "a.b.c" | perl -a -F\\. -ne 'print "$F[1]\n";' 
b 
+1

Genial, gracias! Me pregunto qué '-0' es, entonces ... – Frank

+1

' -0' establece el * separador de registros * (noción de Perl de lo que separa una línea de la siguiente) – mob

+1

Es el separador de registros, no el separador de campos. – tripleee

5

-0 especifica el registro (línea) separador. Fue causa de Perl para recibir tres líneas:

>echo a:b:c | perl -072 -nE"say" 
a: 
b: 
c 

Ya que no hay espacios en blanco en cualquiera de esas líneas, $F[1] estaría vacío si -a iban a ser utilizado.

-F especifica la entrada campo separador. Esto es lo que quieres.

perl -F: -lanE'say $F[1];' 

O si le pegan con un Perl mayores: opciones de línea de

perl -F: -lane'print $F[1];' 

comando están documentados en perlrun.

Cuestiones relacionadas