我有一个非常大的文件,我想从中提取行。我希望Grep可以胜任这项工作,但我遇到了问题。
我想返回与模式匹配的所有行。但是,如果匹配行的以下行包含单词“Raw”,我也想返回该行。
这可行吗?或者另一种方法更合适?
例如,
输入:
模式等等等等等等
什么都没有
模式的东西准备好了
没什么原始的
“模式”上的grep应该返回:
模式等等等等等等
模式的东西准备好了
没什么原料
结果中包含“没有Raw”这一行,因为它包含“Raw”并且跟随已匹配的行“pattern ready ready”。
由于
答案 0 :(得分:1)
这样的事情应该有效:
grep -A 1 'pattern' file.txt | grep 'pattern\|Raw'
答案 1 :(得分:0)
使用grep可能会有一些非常聪明的方法来做到这一点。但是在考虑这一点的时候,你可能已经用Perl编写了你的脚本。
这样的事情可以解决问题:
#!/usr/bin/perl
use strict;
use warnings;
my $pattern = 'pattern';
my $raw = 'Raw';
my $prevMatched = 0;
foreach my $ln (<>)
{
if ($ln =~ /$pattern/)
{
print $ln;
$prevMatched = 1;
}
else
{
if ($prevMatched && $ln =~ /$raw/)
{
print $ln;
}
$prevMatched = 0;
}
}
答案 2 :(得分:0)
许多grep实现支持-e然后你可以链接:
/usr/xpg4/bin/grep -e "^<pattern>" -e "Raw"
(但只有在每次出现“Raw”有效时才有效)