根据每行的匹配更改文本

分享于 

2分钟阅读

ubuntu

  繁體

问题:

我有一个文本文件,包含文本如下所示:


I love bash


$ I love html


$ I hate you


I love you man



我想在行的开头和结尾添加一些与$匹配的文本,

需要输出:


I love bash


Yes I love html man


Yes I hate you man


I love you man




答案1:

如果你想替换前导$ (根据你的原始问题),方法


sed '/^$/{s/^$/Yes/;s/$/ man/}' file



这可以缩写为


sed '/^$/{s//Yes/;s/$/ man/}' file



更复杂的解决方案,使用GNU sed T扩展的分支:


sed 's/^$/Yes/;T;s/$/ man/' file



对于非gnu sed,你需要反转分支逻辑:


sed 's/^$/Yes/;ta;b;:a;s/$/ man/' file



如果你想保留前导$ (按注释排列)


sed '/^$/{s/^/Yes /;s/$/ man/}' file




答案2:


echo '$ abc' | sed 's/$.* (.*)/prefix#1#postfix/'




文本  TEX  MAT  SED