我有一个变量$ string,我想在行中找到一个关键字后打印所有行(包括带关键字的行)
$string=~ /apple /;
我正在使用此正则表达式来查找关键字,但我不知道如何在此关键字后打印行。
答案 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