Procure por linha contendo

Procure por linha contendo

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 sedcomando 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.sbem 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

informação relacionada