値に "&" を含むファイルの文字列を置き換えようとしています。
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