我有一个文本文件,其中包含一些文本,如下所示:
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