앰퍼샌드(&)와 함께 sed 사용

앰퍼샌드(&)와 함께 sed 사용

저는 SAS 파일을 개별적으로 변경하는 대신 sed를 사용하여 가지고 있는 SAS 파일의 패턴을 찾아 교체합니다. 문제는 매크로 변수를 대체하려고 하는데 앰퍼샌드를 사용할 때 올바르게 처리되지 않는다는 것입니다.

Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas

이 명령을 실행할 때마다 원본 텍스트가 추가되고 온갖 이상한 작업이 수행되는 것 같습니다.

질문: sed 명령을 사용하여 앰퍼샌드가 포함된 텍스트를 바꾸는 방법은 무엇입니까?

답변1

&대체 텍스트에서는 특별합니다. 이는 "패턴과 일치하는 입력의 전체 부분"을 의미하므로 여기서 대체하는 작업은 대체 텍스트에 실제 & 기호를 삽입하는 것 user=&uidX입니다 .user=user=&uidXsysuserid.\&

잘못 보이는 또 다른 점은 .검색 패턴에서 모든 문자(개행 제외)를 나타내지만 .텍스트 끝을 바꾸는 것이 리터럴 점이라는 것입니다. 리터럴 문자열만 user=&uid.바꾸 려면 .백슬래시로 보호하세요.

sed -e 's/user=&uid\./user=\&sysuserid./g'

하나의 문자를 대체하고 결과에 유지하려면 해당 문자를 그룹에 넣고 \1대체에 사용하여 그룹을 참조하십시오.

sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'

실제로 원본과 대체 항목 간의 중복을 고려하면 어쨌든 그룹을 사용해야 합니다.

sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'

즉, " u및 로 대체 sysuser"입니다.user=&id.

관련 정보