如何在文本块中找到特定的数字并打印以关键字开头并以?结尾的完整文本块?基本上这是我的文件的样子:"BEGIN""END"
BEGIN
A: abc
B: 12345
C: def
END
BEGIN
A: xyz
B: 56789
C: abc
END
BEGIN
A: ghi
B: 56712
C: pqr
END
[...]
如果我在寻找'^B: 567',我想得到这个输出:
BEGIN
A: xyz
B: 56789
C: abc
END
BEGIN
A: ghi
B: 56712
C: pqr
END
我可以在这里使用grep(grep -E -B2 -A2 "^B: 567" file),但我希望得到一个更通用的解决方案.我想awk或sed可能会这样做!?
谢谢!:)
$ awk -v RS= -v ORS='\n\n' '/\nB: 567/' file
BEGIN
A: xyz
B: 56789
C: abc
END
BEGIN
A: ghi
B: 56712
C: pqr
END
注意\n之前B确保它出现在^一行的开头.这取代了你原来的字符串开头字符,因为现在每一行都不是它自己的字符串.您需要在上面设置ORS以重新插入记录之间的空白行.
这可能对您有用(GNU sed):
sed -n '/^BEGIN/{x;d};H;/^END/{x;s/^B: 567/&/mp}' file
或这个:
sed -n '/^BEGIN/!b;:a;$!{N;/\nEND/!ba};/\nB: 567/p' file
| 归档时间: | 
 | 
| 查看次数: | 4205 次 | 
| 最近记录: |