搜索包含以下内容的行

搜索包含以下内容的行

我确实希望通过一行(复制和粘贴)命令修改 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

相关内容