2016-09-05 155 views

回答

0

-p導致每行被打印;相當於while (<>) { ... } continue { print }
-n不會自動打印每一行;相當於while(<>) {...}

例如,更換fooFOO

$ echo 'foo bar' | perl -pe 's/foo/FOO/' 
FOO bar 
$ echo 'foo bar' | perl -ne 's/foo/FOO/' 
$ 

一個例子-n是有用的,當你不希望打印的每一行做的,並且在代碼中的條件打印,例如,僅含有foo顯示行:

$ echo -e 'foo\nbar\nanother foo' | perl -ne 'print if /foo/;' 
foo 
another foo 
$ 
-1

的perl -n相當於而(<>){...} perl的-p是等效噸O的同時(<>){...;打印;}

+1

與@Rob Bednark的答案相同:使用'-p',打印在'continue'塊中。您可以通過運行以下命令輕鬆地測試它:'perl -pe'next'',並且看到它會打印您輸入的任何內容,而while(<>){next; print;}'不會打印任何內容。 – Dada

7

-p是短期的-np,並且它會導致$_要打印由-n創建的每個循環過程。


perl -ne'...' 

執行下面的程序:

LINE: while (<>) { 
    ... 
} 

perl -pe'...' 

執行下面的程序:

LINE: while (<>) { 
    ... 
} 
continue { 
    die "-p destination: $!\n" unless print $_; 
} 

有關perl的命令行選項的文檔,請參閱perlrun

+0

*'-p'是什麼意思是'-np' *的簡稱?我沒有在文檔中看到。 –

+0

文檔描述'-p'與我做的不同,但是等價。我的描述更準確地反映了實現,並承認兩者之間的相似性,而perlrun假設它們完全不同並且不相關。但是,兩種解釋雖然不同,但都是相同的。 – ikegami

7

你如何決定使用哪一個?

,如果你想在隱含while循環的每次迭代結束時自動打印$_的內容可以使用-p。如果您不想自動打印$_,則使用-n

-p的示例。將行號添加到文件中:

$ perl -pe '$_ = "$.: $_"' your_file.txt 

-n的示例。一個基本的grep替代。

$ perl -ne 'print if /some search text/' your_file.txt 
相關問題