2

我有一个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,但没有任何反应,也没有输出。为什么是这样?

4

2 回答 2

3

这可能对您有用(GNU sed):

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

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

于 2012-08-07T10:07:30.023 回答
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
于 2012-08-07T09:32:05.690 回答