仅使用 sed 一次匹配两个模式之间的行

仅使用 sed 一次匹配两个模式之间的行

鉴于:sed -e '/pattern1/,/pattern2/!d' file.org

如何匹配pattern1和pattern2之间第一次出现的行,而不是其余的?

例如:

pattern1
aaaa
pattern2
pattern1
bbb
pattern

应该输出: aaa

欢迎替代解决方案(使用grep或其他)。awk

答案1

$ cat input
a
b
c
a
b
c
$ sed -n '/a/,/c/p;/c/q' input
a
b
c

搜索要打印的范围,然后在看到第一个“结束”标记后退出。

awk使得排除起点和终点变得更容易:

$ awk 'BEGIN { p=0 }  /c/ { p=0; exit } p {print} /a/ { p=1 }' input
b

相关内容