![打印输出匹配模式直到其他模式匹配](https://linux22.com/image/131828/%E6%89%93%E5%8D%B0%E8%BE%93%E5%87%BA%E5%8C%B9%E9%85%8D%E6%A8%A1%E5%BC%8F%E7%9B%B4%E5%88%B0%E5%85%B6%E4%BB%96%E6%A8%A1%E5%BC%8F%E5%8C%B9%E9%85%8D.png)
我试图在模式匹配后打印文本,直到它与文件中的其他模式匹配多次。我尝试修改给定的脚本这里但没能做到。例如。内容为file1.txt
example text
more example
pattern1
important text
very important
need this too
pattern2
i dont require this
junk text
more junk
pattern1
important text
very important
need this too
pattern2
junk
预期输出
pattern1
important text
very important
need this too
pattern1
important text
very important
need this too
有人可以建议编辑吗?
谢谢。
答案1
模式之间的行之间的匹配(包括任一边界)是 sed 中的标准范围选择器:
sed -n -e '/pattern1/,/pattern2/p' example.txt
根据您对效率的重视程度(文件有多大),我可能会偷懒并使用第二遍删除pattern2标记:
cat example.txt \
| sed -n -e '/pattern1/,/pattern2/p' \
| sed -e '/pattern2/d'
(是的,这是对 cat 的无用使用,因为我更喜欢链接多个管道过滤器的可读性而不是性能损失,而且我现在不确定是否< example.txt | sed ... | sed ...
是 POSIX 强制要求的还是只是 bash 中碰巧存在的扩展和 zsh。)