为什么我的-p one-liner打印出我想要跳过的行?

sid*_*com 3 perl

我有一个名为file的文件有三行:

第一
行第二
行第三行

当我这样做:

perl -ne'打印if/one /'文件

我得到这个输出:

第一行

当我尝试这个:

perl -pe'next除非/ one /'文件

输出是:

第一
行第二
行树

我期望两个单线的输出相同.我的期望是错的还是错的?

cjm*_*cjm 8

你的期望是错误的.该-p开关在您的代码周围放置以下循环:

LINE:
  while (<>) {
      ...             # your program goes here
  } continue {
      print or die "-p destination: $!\n";
  }
Run Code Online (Sandbox Code Playgroud)

如果您阅读文档next,它说:

请注意,如果上面有一个continue 块,它甚至会在丢弃的行上执行.

next实际上跳转到continue块(如果有的话),然后再回到循环的状态.

你可以做点什么

perl -pe '$_ = "" unless /one/' file
Run Code Online (Sandbox Code Playgroud)