搜尋包含以下內容的行

搜尋包含以下內容的行

我確實希望透過一行(複製和貼上)命令修改 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

相關內容