값에 "&"가 포함된 파일의 문자열을 바꾸려고 합니다.
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"