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

print lines after finding a key word in perl

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

$string=~ /apple /;

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

如果您的数据是标量变量,我们可以使用几种方法

推荐方法

($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

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

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

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

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

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

for (@string) {
  say if /apple / .. /[=11=]/;
}