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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With