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