我试图打印任何存在于两种不同模式之间的文本,同时也打印这种模式。但只有当文本之间的模式包含特定的字符串使用awk,标志.
我的输入文件:
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发布于 2013-06-26 19:49:54
使用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发布于 2013-06-27 02:30:38
使用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
ENDhttps://stackoverflow.com/questions/17329088
复制相似问题