在 shell 中根据特定上下文替换的字符串

在 shell 中根据特定上下文替换的字符串

我想使用 sed/grep 替换文件中的字符串,但该字符串与另一个字符串混合在一起

例子:

sed -i 's/php/vinu/g' test.yml  # to replace string php with vinu

测试.yml

php
phpehealth
dophp
testingphpin

在上面的 yml 文件中包含多个“php”字符串,但我只想用“vinu”替换“php”字符串,其余的不应该碰。

预期输出:

vinu
phpehealth
dophp
testingphpin

答案1

如果您的 sed 版本支持,请在正则表达式中使用单词边界,例如

sed -i 's/\<php\>/vinu/g' 

答案2

单词边界的另一种方式:

sed -i 's/\bphp\b/vinu/g' file

相关内容