Mar*_*mbo 12 command-line grep text-processing
我想在匹配之前显示所有行,例如不仅是 10、7 或 14 行,如如何在 bash 中的 grep 结果之前/之后获取行中所述?.
我该怎么做?是否包含匹配的行并不重要。
例如,而不是:
... | grep -B 10 -- "foo"
Run Code Online (Sandbox Code Playgroud)
我想要:
... | grep -B -- "foo"
Run Code Online (Sandbox Code Playgroud)
但是这最后的代码不起作用。
Qua*_*odo 15
包括比赛,
sed '/foo/q' file
Run Code Online (Sandbox Code Playgroud)
这是更好地q UITsed尽快找到一个匹配,否则sed会继续读文件,浪费你的时间,这将是相当大文件。
除了比赛,
sed -n '/foo/q;p' file
Run Code Online (Sandbox Code Playgroud)
该-n标志意味着只有到达p命令的行才会被打印。由于该foo行触发了quit 操作,因此它不会到达p,因此不会被打印。
如果你sed是 GNU 的,这可以简化为
sed '/foo/Q' file
Run Code Online (Sandbox Code Playgroud)
参考
/foo/—地址q, p—常用命令Q— GNU Sed 扩展命令-n—命令行选项sed鉴于file.txt的内容,这是一个解决方案:
bar
baz
moo
foo
loo
zoo
Run Code Online (Sandbox Code Playgroud)
命令包括模式
tac file.txt | sed -n '/foo/,$p' | tac
Run Code Online (Sandbox Code Playgroud)
输出
bar
baz
moo
foo
Run Code Online (Sandbox Code Playgroud)
排除模式
tac file.txt | sed -n -e '/foo/,$p' | tac | sed -n '/foo/!p'
bar
baz
moo
Run Code Online (Sandbox Code Playgroud)