根据匹配结果更改每一行的文本

根据匹配结果更改每一行的文本

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

I love bash
$ I love html
$ I hate you
I love you man

我想在行首和行末添加一些文本,并匹配$。意味着所有包含符号的行$都应在开头“ yes”和结尾“ man”有一些文本。

所需输出:

I love bash
Yes I love html man
Yes I hate you man
I love you man

答案1

如果你想代替领先的$(根据你最初的问题)那么 KISS 方法是

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

这可以缩写为

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

通过利用与//前一个正则表达式匹配的事实。

一个更复杂的解决方案,利用 GNU sedT扩展的分支:

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

使用非 GNU sed 时,您需要反转分支逻辑:

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

如果你想保存然后是领先的$(根据评论)

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

相关内容