【发布时间】:2012-02-14 20:25:20
【问题描述】:
我可以使用它来查找“fly”的所有实例并在我的文件中将其替换为“insect”:
sed -i 's/fly/insect/g' ./animals.txt
如何找到一个 BASH 变量并将其替换为另一个 BASH 变量?例如:
name=$(echo "fly")
category=$(echo "insect")
sed -i 's/$name/$category/g' ./animals.txt
更新:
我使用的是 GNU sed 版本 4.2.1。当我尝试以下解决方案时,它会报告此错误:
sed: -e expression #1, char 73: unknown option to `s'
更新:
我发现了错误出现的原因。 $category 经常包含很多符号(例如“/”、“$”、“@”、“!”、括号等)。
ame=$(echo "fly")
category=$(echo "in/sect")
sed -i "s/$name/$category/g" ./animals.txt
上面的代码会产生同样的错误:
sed: -e expression #1, char 7: unknown option to `s'
有没有办法让sed 完成替换,即使遇到这些符号?
【问题讨论】:
-
为什么是
name=$(echo "fly")而不仅仅是name=fly?还是name="because it has spaces"? -
我试图提供一个简单的例子,因为解释所有其他例子太难了。简单的例子和我的完整代码有同样的问题,即:
name=$(echo $entry | awk -F ",*" '{print $3}')和category=$(echo "\mymacro{"$name"}{"$description"}{"$details"}")。