sed를 사용하여 패턴을 개별적으로 변경하지 않고 SAS 파일 내에서 패턴을 찾아서 바꾸고 있습니다. 문제는 매크로 변수를 바꾸려고하는데 앰퍼샌드를 사용할 때 올바르게 처리되지 않습니다.
Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas
이 명령을 실행할 때마다 원본 텍스트로 모든 종류의 펑키 한 것들을 추가하고 수행하는 것처럼 보입니다.
질문 : 앰퍼샌드가 포함 된 텍스트를 sed 명령으로 바꾸려면 어떻게합니까?
답변
&
대체 텍스트에서 특별합니다. “패턴과 일치하는 입력의 전체 부분”을 의미하므로 여기서 수행중인 작업은로 대체 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.
“.