我有一个名为file的文件有三行:
第一行 第二行 第三行
当我这样做时:
perl -ne'打印if / one /'file
我得到了这个输出:
第一行
当我尝试这个时:
perl -pe'next除非/ one /'file
输出是:
第一行 第二行 线树
我预计两个单线的输出相同。我的期望是错的还是错的?
答案 0 :(得分:8)
你的期望是错误的。 -p
开关在您的代码周围添加以下循环:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
如果您阅读the documentation for next
,则会说:
请注意,如果有
continue
阻止在上面,它会得到 甚至在废弃的线路上执行。
next
实际上会跳转到continue block(如果有的话),然后再回到循环状态。
您可以执行类似
的操作perl -pe '$_ = "" unless /one/' file
答案 1 :(得分:3)
首先介绍程序中使用的选项:
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed
perl -ne 'print if /one/' file
只打印第一行作为其中唯一包含字符串“one”的行。
perl -ne 'next unless /one/' file
不会打印任何内容,因为它没有打印调用且没有-p
选项。
perl -pe 'next unless /one/' file
与上面几乎相同,程序本身没有输出,但由于-p
选项,文件的每一行都被打印出来。
答案 2 :(得分:1)
$ perl -ne 'next unless /one/ && print' file
line one