如何在比赛上方轻松打印线并跳过比赛本身?grep -A,-B并-o选择不解决它.也许有些awk神奇?
例如:
$ cat foo.txt
bar
foo
baz
foo
$ cat foo.txt | grep foo-SOMETHING
bar
baz
Run Code Online (Sandbox Code Playgroud)
编辑
附加功能:考虑以下示例:
bar
foo
baz
foo
foo
Run Code Online (Sandbox Code Playgroud)
这应该理想地回归
bar
baz
foo
Run Code Online (Sandbox Code Playgroud)
Bar*_*mar 15
awk '!/foo/ { line = $0 }
/foo/ { print line }' foo.txt
Run Code Online (Sandbox Code Playgroud)
第一个子句将每个非foo行保存在变量中.第二个子句在行匹配时打印最近保存的行foo.
这也有效(并处理foo连续两行的情况):
awk '/foo/ {print line}
{line = $0}' foo.txt
Run Code Online (Sandbox Code Playgroud)
随grep你可以做:
grep -B 1 foo foo.txt | grep -vE 'foo|^--$'
Run Code Online (Sandbox Code Playgroud)
第二个命令过滤掉foo匹配块之间打印的行和分隔符.