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

답변2

&대체 텍스트의 문자를 이스케이프해야 합니다 . 이는 &텍스트를 대체하는 특수 문자 때문입니다. 그러니 $varj따라 해보세요.

varj = '222|abc \& efg|123'

그러면 sed다음과 같이 호출할 수 있습니다.

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

관련 정보