
値に "&" を含むファイルの文字列を置き換えようとしています。
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
答え2
&
代替テキストの文字をエスケープする必要があります。これは&
、テキストを置き換える特殊文字によるものです。だから$varj
フォローしてください。
varj = '222|abc \& efg|123'
これにより、sed
次のように呼び出すことができます。
echo $vari | sed -e "s/$vari/$varj/g"