sed 打印跨行的模式

sed 打印跨行的模式

我正在学习 sed,目前遇到以下问题:

我想^C从以下输出中提取 之间找到的行:

banner exec ^C
This is
the
banner
^C
banner motd ^C
This is
the MOTD
banner
^C
!
line con 0
 exec-timeout 0 0
 privilege level 15
 logging synchronous

我在用着作为参考,但如果您不知道要捕获多少行,这似乎不是一个好主意。处理这个问题的最佳方法是什么?

答案1

类似这样的东西应该可以工作,假设源数据位于文件 test.txt 中,这使用 grep 来排除包含 '^C' 的行:

sed -n '/\^C/,/\^C/p' test.txt|grep -v '\^C'

您的示例的输出:

This is
the
banner
This is
the MOTD
banner

答案2

所以,我想通了。看来这可以解决问题:

sed -n '/\^C/,/\^C/{/\^C/!{p}}' input

显然,您可以在两个匹配的正则表达式之间运行 sed,因此我只需将相同的正则表达式作为开头和结尾/\^C/,/\^C/,然后打印行,跳过包含相同模式的最后一行。

我不知道这是否是最好的方法,但它似乎有效。

相关内容