다음을 포함하는 행 검색

다음을 포함하는 행 검색

특정 문자열(정규식 패턴이기도 함)이 포함된 줄 뒤에 정규식이 포함된 새 줄을 삽입하여 한 줄(복사하여 붙여넣기) 명령으로 Mac OS X 샌드박스 파일을 수정하고 싶습니다.

편집할 파일은 루트 권한이 필요하며 에 있습니다 /usr/share/sandbox/clamd.sb.

검색 줄과 추가 줄에는 모두 정규식이고 경로가 포함되어 있기 때문에 일반적으로 이스케이프해야 하는 많은 문자가 포함되어 있습니다.

다음을 포함하는 행 검색

(regex #"^/private/var/clamav/")

참고: 어떤 경우에는 문자열 앞에 탭 문자가 옵니다.

일치 항목 앞에 이 줄을 삽입하세요.

    (regex #"^/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent\$")

참고: 삽입할 줄 바꿈 앞에는 탭 문자( \t)가 와야 합니다.

나의 실패한 시도

sudo sed -i '' -e $'/(regex #"\^\/private\/var\/clamav\/")/a \t(regex #"\^\/System\/Library\/PrivateFrameworks\/TrustEvaluationAgent\.framework\/Versions\/A\/TrustEvaluationAgent\\\$")' /usr/share/sandbox/clamd.sb
sed: 1: "/(regex #"\^\/private\/ ...": command a expects \ followed by text

질문

sed위 명령 을 수정하는 방법

또는

이 샌드박스 구성 파일을 확장하기 위해 웹 사이트에서 Mac OS X 터미널(bash)로 복사하고 붙여넣을 수 있는 더 읽기 쉽고 작동 가능한 대안을 제공하시겠습니까?

답변1

macOS Sed에서는 이 작업을 수행할 수 없습니다.삽입하려는 행에서 선행 공백이 제거되기 때문입니다.

awk를 사용하세요:

awk '/\(regex #"\^\/private\/var\/clamav\/"\)/ {print "\t(regex #\"^/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent\$\")"}; {print}' /usr/share/sandbox/clamd.sb > ~/temp-clamd.sb

~/temp-clamd.sb파일을 제자리에서 편집하는 대신(BSD Awk에서는 까다롭거나 불가능함) 출력을 리디렉션했습니다 .

다음으로 변경 사항이 예상한 대로인지 확인할 수 있습니다.

diff /usr/share/sandbox/clamd.sb ~/temp-clamd.sb

모든 것이 정확하면 원본 파일의 내용을 수정된 복사본(아니요를 사용하면 mvinode, 권한, 소유자가 변경됩니다.

cat ~/temp-clamd.sb | sudo tee /usr/share/sandbox/clamd.sb

관련 정보