Deseo modificar un archivo sandbox de Mac OS X mediante un comando de una línea (copiar y pegar), insertando una nueva línea, que contenga una expresión regular, después de una línea que contenga una cadena específica (que también es un patrón de expresión regular).
El archivo a editar requiere derechos de root y se encuentra en /usr/share/sandbox/clamd.sb
.
Tanto las líneas de búsqueda como las de adición contienen una gran cantidad de caracteres que generalmente se escapan porque son expresiones regulares y rutas que contienen.
Buscar línea que contenga
(regex #"^/private/var/clamav/")
Nota: la cadena está precedida por tabulaciones en un caso.
Inserta esta línea antes del partido.
(regex #"^/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent\$")
Nota: esta cadena de nueva línea que se va a insertar debe ir precedida de una tabulación ( \t
).
mi intento fallido
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
Pregunta
Cómo arreglar el sed
comando anterior
o
¿Proporciona una alternativa mejor legible y funcional que pueda usarse para copiar desde un sitio web y pegar en la terminal Mac OS X (bash) para extender este archivo de configuración de sandbox?
Respuesta1
No puedes hacer esto con macOS Sed,porque elimina los espacios en blanco iniciales de las líneas que está insertando.
Usando 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
Tenga en cuenta que he redirigido la salida en ~/temp-clamd.sb
lugar de editar el archivo en su lugar (lo cual es complicado o imposible con BSD Awk).
A continuación puedes comprobar que los cambios son como esperas con:
diff /usr/share/sandbox/clamd.sb ~/temp-clamd.sb
Si todo está correcto, sobrescribe el contenido del archivo original con la copia modificada (nouse mv
, que cambiaría el inodo, permisos, propietario):
cat ~/temp-clamd.sb | sudo tee /usr/share/sandbox/clamd.sb