perl -n
和perl -p
选项有什么区别?
证明差异的简单例子是什么?
您如何决定使用哪一个?
答案 0 :(得分:8)
您如何决定使用哪一个?
如果要在隐含-p
循环的每次迭代结束时自动打印$_
的内容,请使用while
。如果您不想自动打印-n
,请使用$_
。
-p
的一个例子。将行号添加到文件中:
$ perl -pe '$_ = "$.: $_"' your_file.txt
-n
的一个例子。基本的grep
替换。
$ perl -ne 'print if /some search text/' your_file.txt
答案 1 :(得分:7)
-p
是-np
的缩写,它会导致$_
创建的循环每次传递-n
。
perl -ne'...'
执行以下程序:
LINE: while (<>) {
...
}
,而
perl -pe'...'
执行以下程序:
LINE: while (<>) {
...
}
continue {
die "-p destination: $!\n" unless print $_;
}
有关perl
命令行选项的文档,请参阅perlrun。
答案 2 :(得分:0)
-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
$
答案 3 :(得分:-1)
perl -n相当于while(&lt;&gt;){...} perl -p相当于while(&lt;&gt;){...; print;}