특정 문자열(정규식 패턴이기도 함)이 포함된 줄 뒤에 정규식이 포함된 새 줄을 삽입하여 한 줄(복사하여 붙여넣기) 명령으로 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, 권한, 소유자가 변경됩니다.
cat ~/temp-clamd.sb | sudo tee /usr/share/sandbox/clamd.sb