使用awk或sed打印包含2个以上模式的段落

使用awk或sed打印包含2个以上模式的段落,awk,sed,Awk,Sed,我只想打印以“select”开头,以“;”结尾的段落,但应该包含“IN cccc”,例如,如果我有以下代码 select aaaa bbbb IN cccc ; select dddd eeeee IN ffff ; select rrrr eeeee IN cccc ; 结果是 select aaaa bbbb IN cccc ; select rrrr eeeee IN cccc ; 下面是我使用的awkawk'/^select*/,/^/{if($0~/^IN cccc/);print

我只想打印以“select”开头,以“;”结尾的段落,但应该包含“IN cccc”,例如,如果我有以下代码

select aaaa
bbbb
IN cccc
;
select dddd
eeeee
IN ffff
;
select rrrr
eeeee
IN cccc
;
结果是

select aaaa
bbbb
IN cccc
;
select rrrr
eeeee
IN cccc
;
下面是我使用的awk
awk'/^select*/,/^/{if($0~/^IN cccc/);print}'输入文件

但是我得到了我文件的全部内容

你可以试试这个
awk

awk 'BEGIN{ORS=RS=";"} /^[[:space:]]*select.*IN cccc/' file
这里,

  • ORS
    -输出记录分隔符
  • RS
    -输入记录分隔符

    • 您可以试试这个
      awk

      awk 'BEGIN{ORS=RS=";"} /^[[:space:]]*select.*IN cccc/' file
      
      这里,

      • ORS
        -输出记录分隔符
      • RS
        -输入记录分隔符

      @fedorqui我使用了以下awk,但似乎我缺少了一些“awk”/^select*/,/^;/{if($0~/^在cccc/);print}inputfile您的问题是分号的位置错误。您的意思是
      如果($0~/^在cccc/){print}
      当然,修复该问题不足以实现您的目标。@fedorqui我使用了以下awk,但似乎缺少了一些“awk”/^select*/,/^/{如果($0~/^IN cccc/);print}inputfile您的问题是分号的位置错误。你的意思是
      if($0~/^IN-cccc/){print}当然,修复该问题不足以实现您正在尝试的操作。注意:
      \s
      是特定于GNU awk的。如果使用nawk或mawk,请使用
      [[:space:]
      。这将错误打印包含
      选择的记录,从而破坏cccc
      。idk,如果可以,或者如果可以的话-如果有问题,请在您关心的单词周围添加单词边界(GNU awk)、空格、换行符或其他内容…注意:
      \s
      是GNU awk特有的。如果使用nawk或mawk,请使用
      [[:space:]
      。这将错误打印包含
      选择的记录,从而破坏cccc
      。idk如果可以,或者如果可以,如果可以-如果有问题,请在您关心的单词周围添加单词边界(GNU awk)、空格、换行符或其他内容。。。。