如果第二个模式不匹配,如何不打印输出

如果第二个模式不匹配,如何不打印输出

文件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

相关内容