2011-08-31 16 views

risposta

13

Guarda -F in perlrun:

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

Si noti che il valore è preso come espressioni regolari, in modo da alcuni delimitatori può essere necessario un po 'di fuga in più:

% 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

Cool, grazie! Mi chiedo cosa sia '-0', quindi ... – Frank

+1

' -0' imposta il * separatore di record * (la nozione di Perl di cosa separa una riga dalla successiva) – mob

+1

È il separatore di record, non il separatore di campo. – tripleee

5

-0 specifica il record di (linea) separatore. Era causa Perl ricevere tre linee:

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

In mancanza di spazio bianco su una qualsiasi di queste linee, $F[1] sarebbe vuota se -a dovevano essere utilizzati.

-F specifica l'ingresso campo separatore. Questo è quello che vuoi.

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

Oppure, se sei bloccato con un vecchio Perl: le opzioni della riga

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

comandi sono documentati in perlrun.

Problemi correlati