我正在学习 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/
,然后打印行,跳过包含相同模式的最后一行。
我不知道这是否是最好的方法,但它似乎有效。