bash - 打印包含特定字符串的两个模式之间的所有行

标签 bash shell scripting awk

我正在尝试使用此模式打印两个不同模式之间存在的任何文本。但仅当模式之间的文本包含特定字符串时[使用 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

最佳答案

使用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

关于bash - 打印包含特定字符串的两个模式之间的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329088/

相关文章:

linux - 使用bash脚本进行git克隆,无法读取存储库的密码

linux - 环境变量未导出

linux - 填充文件到 4 字节边界

linux - 如何为文件的每一行创建文件夹?

shell - 如何从 Maven 存储库中找到最新版本的 Artifactory

bash - 从 bash 读取 java .properties 文件

linux - 拒绝用户多次登录的 Shell 脚本

bash - Rebar3 和 Erlang -heart 标志

linux - 使用awk将文件拆分为多个文件,但采用日期格式

用于 Powershell 远程脚本的 Android 客户端?