微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

正则表达式 – 如何在找到与sed匹配后只追加一行?

我想在PHP文件中的行端口后附加’maildomain’.我真的想用这个solution,因为这看起来最干净,非常清楚,所以我做了

sed -i "350,/port/a \'maildomain\'" file.PHP

但它出来是这样的:

351 : 'maildomain'
352 : 
353 : 'maildomain'
354 : 
...
358 : blablabla port blabla
359 : 'maildomain'

如您所见,它从第350行交替添加’maildomain’,直到找到最初位于第354行的端口.如何修改上面的sed命令只是在端口之后而不是之前添加’maildomain’?谢谢.

另外,当使用353而不是350时,它给了我:

353 : 'maildomain'
354 : balsdbflasdbflsd port blablablabla
355 : 'maildomain'

为什么?谢谢〜

解决方法:

如果您希望在包含端口的任何行之后添加“maildomain”,则Barmar具有正确的答案.但是,如果您有许多这样的行包含端口并且只希望在行号350之后添加,那么您可以执行以下操作:

sed -i "350,/port/{
    /port/a \'maildomain\'
}" file.PHP

这将查找第350行之后的行以及其中包含端口的任何行,它将在其后附加“maildomain”.注意我是如何在多行上拆分命令的.你也需要这样做.这是因为sed中的a命令需要一个实际的换行符.

如果您只希望在第350行之后添加一次,那么您可以在完成添加后将其分支出来.

sed -i "350,/port/{
    /port/a \'maildomain\'
    b;
}" file.PHP

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐