SEDに特別な文字列を渡す方法

user889030:

午前の特殊文字のsedコマンドに文字列が、私は、バックスラッシュを試していないが、成功なしの成功を渡そうとし

sed -i 's/old/new/g' {} +   # working 

sed -i 's/$_REQUEST['old']/$_REQUEST['new']/g' {} +   # not working 
sed -i 's/$_REQUEST[\'old\']/$_REQUEST[\'new\']/g' {} +   # not working 
sed -i "s/$_REQUEST['old']/$_REQUEST['new']/g" {} +  # NIGHTMARE ! not working 
グレン・ジャックマン:

これは、単一引用符で囲まれた文字列の内部ではなく、さらにそれらをエスケープすることにより、単一引用符を含めることはできません。

そして、二重引用符で、シェルが展開されます$_REQUEST(おそらく、空の文字列を代入する)変数を。

これを試して:

sed -i 's/\$_REQUEST\['\'old\''\]/$_REQUEST['\'new\'']/g' {} + 
# ...................^^...^^..............^^...^^

それらは置かリテラル単一引用符です外に単一引用符で囲まれた文字列のチャンク。

あるいは、二重引用符で囲むドルをエスケープ:

sed -i "s/\\\$_REQUEST\\['old'\\]/\$_REQUEST['new']/g" {} +
# ,.......^.................^.

左側にある正規表現の特殊文字のために必要なエスケープを含めるように編集

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=28366&siteId=1