文件1:
pattern1
a
b
c
end
命令=>
cat file1 | sed -n '/pattern1/,/pattern2/p'
输出=>
pattern1
a
b
c
end
如果第二个模式不匹配,如何不打印输出?
期望的输出:
pattern1
答案1
您需要缓冲文本,直到看到结尾“模式”(顺便说一句,可怕的词 - 请参阅如何找到与模式匹配的文本),例如参见下面的 awk 命令:
$ cat file1
pattern1
a
b
c
end
$ sed -n '/pattern1/,/pattern2/p' file1
pattern1
a
b
c
end
$ awk '/pattern1/{f=1; print; buf=""; next} f{buf=buf $0 ORS; if (/pattern2/) {printf "%s", buf; f=0} }' file1
pattern1
$ awk '/pattern1/{f=1; print; buf=""; next} f{buf=buf $0 ORS; if (/end/) {printf "%s", buf; f=0} }' file1
pattern1
a
b
c
end