私は次のコードを試して置き換えました QQ
と ZZ
しかし、それは私が望むことをしません:
var1=QQsed -i 's/$var1/ZZ/g' $file
しかし、このコードは私が望むことをします:
sed -i 's/QQ/ZZ/g' $file
どのように変数を使用するのですか sed
?
私は次のコードを試して置き換えました QQ
と ZZ
しかし、それは私が望むことをしません:
var1=QQsed -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
):
-is,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
を展開する(しゃれた意図)上の @maniの答え,
perl
|
変数の値にも表示される可能性があるので、他の区切り文字を試してみるのを恐れないでください