我正在尝试编写一个bash脚本,该脚本接受一些变量,然后使用grep使用给定的文件搜索来查找/替换具有该字符串的文件列表。我认为我遇到的问题是在sed中看到变量,我不确定还有什么可能。

if [ "$searchFiles" != "" -a "$oldString" != "" -a "$newString" != "" ]; then
   echo -en "Searching for '$searchFiles' and replacing '$oldString' with '$newString'.\n"
   for i in `grep $oldString $searchFiles |cut -d: -f1|uniq`; do
      sed -i 's/${oldString}/${newString}/g' $i;
   done
   echo -en "Done.\n"
else
   usage
fi

最佳答案

使用双引号,这样shell可以替换变量。

for i in `grep -l $oldString $searchFiles`; do
  sed -i "s/${oldString}/${newString}/g" $i;
done

如果搜索或替换字符串包含特殊字符,则需要对其进行转义:Escape a string for a sed replace pattern

07-24 13:49