Bash script using sed with variables in a for loop?
I'm trying to write a bash script that takes a few variables and then does a find/replace with a given file search using grep to get the list of files that have the string. I think the issue I'm having is having the variables be seen in sed I'm not sure what else it might be.
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
use double quotes so the shell can substitute variables.
for i in `grep -l $oldString $searchFiles`; do
sed -i "s/${oldString}/${newString}/g" $i;
done
if your search or replace string contains special characters you need to escape them: Escape a string for a sed replace pattern
Use double quotes so the environmental variables are expanded by the shell before it calls sed:
sed -i "s/${oldString}/${newString}/g" $i;
Be wary: If either oldString
or newString
contain slashes or other regexp special characters, they will be interpreted as their special meaning, not as literal strings.
精彩评论