我確實希望透過一行(複製和貼上)命令修改 Mac OS X 沙箱文件,方法是在包含特定字串(也是正則表達式模式)的行之後插入包含正則表達式的新行。
要編輯的檔案需要 root 權限,位於/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