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

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.“.