【问题标题】:Print all lines between two patterns containing a particular string打印包含特定字符串的两个模式之间的所有行
【发布时间】:2013-06-26 19:45:02
【问题描述】:

我正在尝试使用此模式打印两种不同模式之间存在的任何文本。但仅当模式之间的文本包含特定字符串 [使用 awk, flag...]。

我的输入文件:

START 12.5 elephant dasnbjdai adfad
      s = ad cat da 524a das
      da 54e dog dada 455ad7
      da 45d cow 554s7e
END
START fjs 4 rhino das 452 da
      da = cat da gd 
      das_d pig das 
      4524s dda monkey dasdc4
END 
START da dfsdg cow
      bear dac45
      lion bla bla 
      5as4 fox bla fa jsa
END
START dandsk cow  dada
      bla sheep bla
      fsgv turtle fsd
      da dragon da
END
START
      daadas pig fsv45 
      dasd walrus das 52
END

我的输出应该是 [只显示 START...END 之间的行,但包含 cat]

START 12.5 elephant dasnbjdai adfad
      s = ad **cat** da 524a das
      da 54e dog dada 455ad7
      da 45d cow 554s7e
END
START fjs 4 rhino das 452 da
      da = **cat** da gd 
      das_d pig das 
      4524s dda monkey dasdc4
END 

如何打印,即所有包含龙和海象的行;

输出

START dandsk cow  dada
      bla sheep bla
      fsgv turtle fsd
      da dragon da
END
START
      daadas pig fsv45 
      dasd walrus das 52
END

【问题讨论】:

  • 你有努力写吗?

标签: bash shell scripting awk


【解决方案1】:

awk 的一种方式:

awk -v RS="END" '$0~/cat/{print $0 RS}' input 

第二种情况:

awk -v RS="END" '$0~/walrus|dragon/{print $0 RS}' input 

如果你不想在两者之间有空行:

awk 'BEGIN{RS="END";ORS=""}$0~/dragon|walrus/{print $0 RS}END{print "\n"}' input

【讨论】:

    【解决方案2】:

    使用 GNU awk(将 RS 设置为多个字符):

    $ gawk 'BEGIN{RS=ORS="\nEND\n"} /dragon|walrus/' file
    START dandsk cow  dada
          bla sheep bla
          fsgv turtle fsd
          da dragon da
    END
    START
          daadas pig fsv45
          dasd walrus das 52
    END
    

    或:

    $ awk -v re="dragon|walrus" 'BEGIN{RS=ORS="\nEND\n"} $0~re' file
    START dandsk cow  dada
          bla sheep bla
          fsgv turtle fsd
          da dragon da
    END
    START
          daadas pig fsv45
          dasd walrus das 52
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      相关资源
      最近更新 更多