前端之家收集整理的这篇文章主要介绍了
正则表达式 – 如何在第一个匹配地址范围之后让sed退出?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个
文件:
header
trigger
text1
text2
trigger
text5
trigger
...
trigger
...
我希望sed只匹配前两次“触发”的事件.所以我试过:
sed -n '/trigger/,/trigger/p'
但是正如sed的man页面所示,它与“trigger”两行内的所有出现匹配.我希望sed在第一场比赛后退出,所以输出会是:
trigger
text1
text2
trigger
我该如何做到这一点?
您可以在GNU sed中使用循环:
sed -n '/trigger/{p; :loop n; p; /trigger/q; b loop}'
说明:
>当您看到第一个/ trigger /,启动一个命令块> p – 打印行>:loop – 设置一个名为loop的标签> n – 得到下一行> p – 打印行> / trigger / q – 如果该行匹配/ trigger /然后退出sed>跳到循环