在perl中找到关键字后打印行

时间:2017-06-07 09:57:31

标签: perl printing line keyword

我有一个变量$ string,我想在行中找到一个关键字后打印所有行(包括带关键字的行)

$string=~ /apple /;

我正在使用此正则表达式来查找关键字,但我不知道如何在此关键字后打印行。

3 个答案:

答案 0 :(得分:1)

只需保留一个标志变量,当你看到字符串时将其设置为true,如果标志为真则打印。

perl -ne 'print if $seen ||= /apple/'

答案 1 :(得分:1)

您的数据来自何处并不十分清楚。我们假设它是一个包含换行符的字符串。让我们先把它分成一个数组。

my @string = split /\n/, $string;

然后我们可以使用触发器操作符来决定要打印哪些行。我使用\0作为正则表达式,不太可能匹配任何字符串(因此,实际上,它总是错误的。)

for (@string) {
  say if /apple / .. /\0/;
}

答案 2 :(得分:0)

如果你的标量变量中的数据我们可以使用几种方法

推荐方法

($matching) =  $string=~ /([^\n]*apple.+)/s;
print "$matching\n";

还有另一种方法可以做到这一点

$string=~ /[^\n]*apple.+/s; 
print $&; #it will print the data which is match.

如果您从文件中读取数据,请尝试以下

while (<$fh>)
{
  if(/apple/)
  {
     print <$fh>;
  }
}

或者尝试以下一个班轮

perl -ne 'print <> and exit if(/apple/);' file.txt