https://stackoverflow.com/a/7451478/15603477
我明白grep -A1 'blah' logfile | grep -v "blah"
但我不明白sed -n '/blah/{n;p;}' logfile
到目前为止我检查了手动 sed 命令行选项页面: https://www.gnu.org/software/sed/manual/html_node/Command_002dLine-Options.html。唯一的-n
办法就是安静。显然/blah/
是指模式/blah/
然后很难理解的部分是{n;p;}
答案1
pattern space
通常 sed 会在处理结束时打印任何内容。该-n
选项禁用此打印,因此只有显式打印请求才会产生输出。
程序/blah/{n;p;}
说“如果该行匹配blah
,则执行n
和p
命令”。n
说“将下一行读入pattern space
”,并p
说“打印pattern space
”。
grep -A1 "blah" | grep -v "blah"
请注意,对于连续行包含 的情况,此 sed 程序会产生不同的结果blah
。该grep
对永远不会输出带有 的行blah
,但 sed 可以。 grep 对的输出还可以包含==
第一个 grep 引入的用于划分块的内容。