Desejo modificar um arquivo sandbox do Mac OS X por meio de um comando de uma linha (copiar e colar), inserindo uma nova linha - contendo um regex - após uma linha que contém uma string específica (também sendo um padrão regex).
O arquivo a ser editado requer direitos de root e está localizado em /usr/share/sandbox/clamd.sb
.
Ambas as linhas de pesquisa e acréscimo contêm muitos caracteres que geralmente devem ser escapados porque são regex-es e contêm caminhos.
Procure por linha contendo
(regex #"^/private/var/clamav/")
Nota: a string é precedida por tabulações em um caso.
Insira esta linha antes da partida
(regex #"^/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent\$")
Nota: esta string de nova linha a ser inserida deve ser anexada com uma tabulação ( \t
).
Minha tentativa fracassada
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
Pergunta
Como corrigir o sed
comando acima
ou
fornecer uma alternativa melhor legível e funcional que possa ser usada para copiar de um site e colar no terminal Mac OS X (bash) para estender esse arquivo de configuração de sandbox?
Responder1
Você não pode fazer isso com o macOS Sed,porque remove os espaços em branco iniciais das linhas que você está inserindo.
Usando o 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
Observe que redirecionei a saída para ~/temp-clamd.sb
em vez de editar o arquivo no local (o que é complicado ou impossível com o BSD Awk).
Em seguida, você pode verificar se as alterações estão conforme o esperado com:
diff /usr/share/sandbox/clamd.sb ~/temp-clamd.sb
Se tudo estiver correto, substitua o conteúdo do arquivo original pela cópia modificada (nãouse mv
, que mudaria o inode, permissões, proprietário):
cat ~/temp-clamd.sb | sudo tee /usr/share/sandbox/clamd.sb