我可以使用它来查找"fly"的所有实例,并在我的文件中将其替换为"insect":
sed -i 's/fly/insect/g' ./animals.txt
Run Code Online (Sandbox Code Playgroud)
如何找到BASH变量并将其替换为另一个BASH变量?例如:
name=$(echo "fly")
category=$(echo "insect")
sed -i 's/$name/$category/g' ./animals.txt
Run Code Online (Sandbox Code Playgroud)
更新:
我使用的是GNU sed版本4.2.1.当我尝试以下解决方案时,会报告此错误:
sed: -e expression #1, char 73: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
更新:
我发现了错误即将到来的原因.$category
经常包含许多符号(例如"/","$","@","!",括号等).
ame=$(echo "fly")
category=$(echo "in/sect")
sed -i "s/$name/$category/g" ./animals.txt
Run Code Online (Sandbox Code Playgroud)
上面的代码将创建相同的错误:
sed: -e expression #1, char 7: unknown option to `s'
Run Code Online (Sandbox Code Playgroud)
有没有办法让sed
完成替换,即使它遇到这些符号?
使用双引号使shell扩展变量同时保留空格:
sed -i "s/$name/$category/g" ./animals.txt
Run Code Online (Sandbox Code Playgroud)
注意:如果需要在替换中添加反斜杠(例如,用于反向引用),则需要双斜杠(\并包含模式匹配):
如果你有很多shell元字符,你可以这样做:
sed -i 's/'$pattern'/'$category'/g' ./animals.txt
Run Code Online (Sandbox Code Playgroud)
我发现了错误即将到来的原因.$ category经常包含许多符号(例如"/","$","@","!",括号等).
如果替换或替换部分包含像那样的字符,/
我们可以使用不同的sed
分隔符集.你可以使用像 - @ % , ; : | _
等任何在你的替换和替换中不会发生的角色.