sed 検索と置換の問題

sed 検索と置換の問題

値に "&" を含むファイルの文字列を置き換えようとしています。

vari = '111|abc & efg|123'
varj = '222|abc & efg|123'

echo $vari | sed -e "s/$vari/$varj/g"

出力は次のとおりです222|abc 111|abc & efg|123 efg|123

変数の検索と置換で「&」を処理する方法がわかりません。誰でも助けることができますか?

ベストアンサー1

&の文字は、コマンド$varjの代替部分で特別な意味を持ちますs/search/replace/。 「ここに一致するテキストを挿入してください」という意味です。

\&「escape」が使える&ので特別な意味はありません。 sed修正を使用して、すべての文字を次のように置き換える$varjことができます。&\&

varj=$(echo "$varj" | sed -e 's/\&/\\\&/g')

たとえば、

cas@ganesh:/tmp$ ksh
$ vari='111|abc & efg|123'
$ varj='222|abc & efg|123'

$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc 111|abc & efg|123 efg|123

$ varj=$(echo "$varj" | sed -e 's/\&/\\\&/g')
$ echo "$varj"
222|abc \& efg|123

$ echo "$vari" | sed -e "s/$vari/$varj/g"
222|abc & efg|123

おすすめ記事