저는 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.