我正在尝试编写一个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