2011-08-31 26 views

Trả lời

13

Nhìn vào -F trong perlrun:

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

Lưu ý rằng giá trị được thực hiện như là biểu hiện thường xuyên, vì vậy một số delimiters có thể cần thêm một số thoát:

% 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

Tuyệt vời, cảm ơn! Tôi tự hỏi '-0' là gì, sau đó ... – Frank

+1

' -0' đặt dấu phân cách * * (Perl's khái niệm về những gì phân tách một dòng từ tiếp theo) – mob

+1

Đó là dấu phân tách bản ghi chứ không phải dấu tách trường. – tripleee

5

-0 xác định kỷ lục (line) separator. Đó là nguyên nhân Perl để nhận ba dòng:

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

Kể từ khi không có khoảng trắng trên bất kỳ của những đường nét, $F[1] sẽ trống nếu -a đã được sử dụng.

-F chỉ định trường nhập trường. Đây là cái bạn muốn.

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

Hoặc nếu bạn đang mắc kẹt với một Perl cũ:

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

lệnh tùy chọn dòng được diễn tả trong perlrun.

Các vấn đề liên quan