条件多线Grep问题

时间:2011-08-02 18:33:17

标签: regex grep multiline

我有一个非常大的文件,我想从中提取行。我希望Grep可以胜任这项工作,但我遇到了问题。

我想返回与模式匹配的所有行。但是,如果匹配行的以下行包含单词“Raw”,我也想返回该行。

这可行吗?或者另一种方法更合适?

例如,

输入:
模式等等等等等等 什么都没有 模式的东西准备好了 没什么原始的

“模式”上的grep应该返回:
模式等等等等等等 模式的东西准备好了 没什么原料

结果中包含“没有Raw”这一行,因为它包含“Raw”并且跟随已匹配的行“pattern ready ready”。

由于

3 个答案:

答案 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”有效时才有效)