如何“grep”某个 string1 的出现和某个 string2 的(第 N 个)出现之间的行。
例如
如果文件有一行:
A
B
C
D
E
F
G
B
C
E
Q
我想以粗体显示行(以 B 开头并以 E 结尾的行)。
这可以使用grep完成吗?或其他一些 Unix 命令行工具?
Tho*_*hor 12
grep
不太适合此任务,您需要“向上”使用一个工具:
sed -n '/^B/,/^E/p' infile
Run Code Online (Sandbox Code Playgroud)
输出:
B
C
D
E
B
C
E
Run Code Online (Sandbox Code Playgroud)
关于第 N 个要求,我认为如果您再次“向上”推进一个工具,即 awk,这是最简单的:
awk '/^B/ { f = 1; n++ } f && n == wanted; /^E/ { f = 0 }' wanted=2 infile
Run Code Online (Sandbox Code Playgroud)
输出:
B
C
E
Run Code Online (Sandbox Code Playgroud)
该标志f
将在/^B/
遇到时设置并在/^E/
发生时取消设置,与 sed 表示法的工作方式非常相似。n
记录通过了多少块,当f == 1 && n == wanted
为真时,将执行默认块 ( { print $0 }
)。