다음을 포함하는 줄 검색

다음을 포함하는 줄 검색

한 줄(복사 및 붙여넣기) 명령을 통해 특정 문자열(정규식 패턴이기도 함)이 포함된 줄 뒤에 정규식이 포함된 새 줄을 삽입하여 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, 권한, 소유자를 변경하는 use ):

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

관련 정보