使用awk或sed如何选择在两个不同的标记模式之间发生的行?可以存在用这些模式标记的多个部分。
例如:
假设文件包含:
abc def1 ghi1 jkl1 mno abc def2 ghi2 jkl2 mno pqr stu
起始模式为abc,结束模式为mno
所以,我需要输出为:
def1 ghi1 jkl1 def2 ghi2 jkl2
我使用sed匹配模式一次:
sed -e '1,/abc/d' -e '/mno/,$d' <FILE>
有没有任何方式在sed或awk重复做它直到文件结束?
awk总是有帮助:
$ awk '/abc/{flag=1;next}/mno/{flag=0}flag' file def1 ghi1 jkl1 def2 ghi2 jkl2
说明:
> / abc /匹配具有此文本的行以及/ mno / does。
> / abc / {flag = 1; next}在找到文本abc时设置标志。然后,它跳过线。
> / mno / {flag = 0}在找到文本mno时取消标志。
>最终标志是具有默认操作的模式,即打印$ 0:如果标志等于1,则打印行。
有关更详细的描述和示例,以及显示模式的情况,请参见How to select lines between two patterns?。