한 줄(복사 및 붙여넣기) 명령을 통해 특정 문자열(정규식 패턴이기도 함)이 포함된 줄 뒤에 정규식이 포함된 새 줄을 삽입하여 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
모든 것이 정확하면 원본 파일의 내용을 수정된 복사본(~하지 않다mv
inode, 권한, 소유자를 변경하는 use ):
cat ~/temp-clamd.sb | sudo tee /usr/share/sandbox/clamd.sb