“perl -n”和“perl -p”有什么区别?

时间:2016-09-05 04:24:15

标签: perl

perl -nperl -p选项有什么区别?

证明差异的简单例子是什么?

您如何决定使用哪一个?

4 个答案:

答案 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;}