全局替换shell脚本不起作用

时间:2012-08-07 09:24:11

标签: shell ubuntu sed

我有一个像以下的shell脚本:

for fl in /home/dr/*.txt; do
mv $fl $fl.old
sed 's#$1#$2#g' $fl.old > $fl
rm -f $fl.old
done

我像./script.sh find replace一样运行它,但没有任何反应,也没有输出。为什么是这样?

2 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

sed -i "s#$1#$2#g" /home/dr*.txt

你遇到的问题是sed命令周围的单引号不允许插值。

答案 1 :(得分:2)

问题在于您使用单引号而不是双引号。使用单引号,sed按字面解释字符串(即它将搜索字符串$1,而不是第一个参数。)

以下是您尝试执行的功能版本。请注意,我已使用sed的“就地”编辑替换了临时文件使用情况。

for fl in /home/dr/*.txt
do
  sed -i "s#$1#$2#g" $fl
done

然而,你可以一线

sed -i "s#$1#$2#g" /home/dr/*.txt