回答
-p
導致每行被打印;相當於while (<>) { ... } continue { print }
-n
不會自動打印每一行;相當於while(<>) {...}
例如,更換foo
與FOO
:
$ 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
$
的perl -n相當於而(<>){...} perl的-p是等效噸O的同時(<>){...;打印;}
-p
是短期的-np
,並且它會導致$_
要打印由-n
創建的每個循環過程。
perl -ne'...'
執行下面的程序:
LINE: while (<>) {
...
}
而
perl -pe'...'
執行下面的程序:
LINE: while (<>) {
...
}
continue {
die "-p destination: $!\n" unless print $_;
}
有關perl
的命令行選項的文檔,請參閱perlrun。
*'-p'是什麼意思是'-np' *的簡稱?我沒有在文檔中看到。 –
文檔描述'-p'與我做的不同,但是等價。我的描述更準確地反映了實現,並承認兩者之間的相似性,而perlrun假設它們完全不同並且不相關。但是,兩種解釋雖然不同,但都是相同的。 – ikegami
你如何決定使用哪一個?
,如果你想在隱含while
循環的每次迭代結束時自動打印$_
的內容可以使用-p
。如果您不想自動打印$_
,則使用-n
。
-p
的示例。將行號添加到文件中:
$ perl -pe '$_ = "$.: $_"' your_file.txt
-n
的示例。一個基本的grep
替代。
$ perl -ne 'print if /some search text/' your_file.txt
- 1. 在Strawberry Perl中,perl \ lib和perl \ site \ lib有什麼區別?
- 2. perl -d中x和p有什麼區別?
- 3. Perl中'for'和'foreach'有什麼區別?
- 4. Perl中的'eq'和'=〜'有什麼區別?
- 5. Perl中BAREWORD和* BAREWORD有什麼區別?
- 6. Perl中$ dxyabc和$ {dxyabc}有什麼區別?
- 7. 「perl test.pl」和「./test.pl」有什麼區別?
- 8. Perl中grep和map有什麼區別?
- 9. sed中p和p有什麼區別?
- 10. 「Array(n)」和「[... Array(n)]」有什麼區別?
- 11. 區別<p>是什麼Javascript和ASP.net有什麼區別?</p>
- 12. 腳本編寫時,#!/ usr/bin/perl和#!/ usr/bin/env perl有什麼區別?
- 13. -p和-q選項有什麼區別
- 14. p和a有什麼區別?
- 15. while(* p){p ++;},while(* ++ p){;}和while(* p ++){;}之間有什麼區別?
- 16. Perl模塊autodie和Fatal有什麼區別?
- 17. Perl中的子程序和腳本有什麼區別?
- 18. 在Perl中,`use lib`和`lib-> import`有什麼區別?
- 19. Perl中的\ L和lc函數有什麼區別?
- 20. C和Perl中的system()有什麼區別?
- 21. 在perl中,$ DB :: single = 1和2有什麼區別?
- 22. Perl中詞法和動態範圍界定有什麼區別?
- 23. Perl正則表達式中的\ 1和$ 1有什麼區別?
- 24. Perl中的open和sysopen有什麼區別?
- 25. 在Perl中`use base`和@ISA有什麼區別?
- 26. perl和java正則表達式能力有什麼區別?
- 27. 函數調用和goto&NAME在Perl中有什麼區別?
- 28. Perl 5中父和基有什麼區別?
- 29. 在Perl中,s/^ \ s + //和s/s + $ //有什麼區別?
- 30. Perl中的system,exec和反引號有什麼區別?
與@Rob Bednark的答案相同:使用'-p',打印在'continue'塊中。您可以通過運行以下命令輕鬆地測試它:'perl -pe'next'',並且看到它會打印您輸入的任何內容,而while(<>){next; print;}'不會打印任何內容。 – Dada