QQ
をZZ
に置き換えるために次のコードを試しましたが、それは私が望むことをしません:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
しかし、このコードは私が望むことをします:
sed -i 's/QQ/ZZ/g' $file
sed
で変数を使用するにはどうすればよいですか?
シェルは変数の展開を担当します。文字列に一重引用符を使用すると、その内容はリテラルとして処理されるため、sed
はリテラル$var1
のすべての出現をZZ
に置き換えようとします。
二重引用符を使用して、空白を保持しながらシェルで変数を展開します。
sed -i "s/$var1/ZZ/g" "$file"
置換文字列に引用文字が必要な場合は、シェルが解釈するバックスラッシュを引用文字の前に付ける必要があります。次の例では、文字列quote me
は"quote me"
に置き換えられます(文字&
はsed
によって解釈されます)。
sed -i "s/quote me/\"&\"/" "$file"
シェルのメタ文字がたくさんある場合は、パターンに一重引用符を使用し、変数に二重引用符を使用することを検討してください。
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
s,pattern,replacement,
の代わりにs/pattern/replacement/
を使用していることに注目してください。/
内の\0/
との干渉を避けるためにしました。
次に、シェルは次の引数を使用して上記のコマンドsed
を実行します(pattern=bert
およびfile=text.txt
と仮定):
-i
s,bert,Say hurrah to &: \0/,
text.txt
file.txt
にbert
が含まれる場合、出力は次のようになります。
Say hurrah to bert: \0/
二重引用符を使用して、sed
で変数を使用できます。
sed -i "s/$var/r_str/g" file_name
変数にスラッシュ/
がある場合、以下のように異なるセパレーターを使用します。
sed -i "s|$var|r_str|g" file_name