我该如何“ grep”出现在某些string1和(第N个)某些string2之间的线。
例如
如果文件包含以下行:
A
B
C
D
E
F
G
B
C
E
Q
我想以粗体显示行(以B开头并以E结尾的行)。
可以使用grep完成吗?或其他一些Unix命令行工具?
grep
不太适合此任务,您需要“升级”一个工具:
sed -n '/^B/,/^E/p' infile
输出:
B
C
D
E
B
C
E
关于第N个要求,如果您再次“升级”一个工具,即awk,我认为这是最简单的:
awk '/^B/ { f = 1; n++ } f && n == wanted; /^E/ { f = 0 }' wanted=2 infile
输出:
B
C
E
该标志f
将在/^B/
遇到时设置,而在/^E/
出现时取消设置,与sed表示法的工作方式大致相同。n
记录经过了多少个块,当f == 1 && n == wanted
为true时,将执行默认块({ print $0 }
)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句