いくつかの変数を取り、grepを使用して特定のファイル検索で検索/置換を行い、文字列を含むファイルのリストを取得するbashスクリプトを記述しようとしています。私が抱えている問題は、変数が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
シェルが変数を置換できるように二重引用符を使用します。
for i in `grep -l $oldString $searchFiles`; do
sed -i "s/${oldString}/${newString}/g" $i;
done
検索または置換文字列に特殊文字が含まれている場合は、それらをエスケープする必要があります。 sed置換パターンの文字列をエスケープする
シェルがsedを呼び出す前に環境変数が展開されるように、二重引用符を使用します。
sed -i "s/${oldString}/${newString}/g" $i;
注意してください:oldString
またはnewString
にスラッシュまたはその他の正規表現の特殊文字が含まれている場合、それらはリテラル文字列としてではなく、特別な意味として解釈されます。