Suche nach Zeile mit

Suche nach Zeile mit

Ich möchte eine Mac OS X-Sandbox-Datei mit einem einzeiligen Befehl (Kopieren und Einfügen) ändern, indem ich nach einer Zeile, die eine bestimmte Zeichenfolge (ebenfalls ein Regex-Muster) enthält, eine neue Zeile mit einem regulären Ausdruck einfüge.

Die zu bearbeitende Datei erfordert Root-Rechte und liegt unter /usr/share/sandbox/clamd.sb.

Sowohl die Such- als auch die Anfügezeilen enthalten eine Menge Zeichen, die normalerweise maskiert werden müssen, da es sich dabei um reguläre Ausdrücke handelt und diese Pfade enthalten.

Suche nach Zeile mit

(regex #"^/private/var/clamav/")

Hinweis: In einem Fall sind der Zeichenfolge Tabulatoren vorangestellt.

Fügen Sie diese Zeile vor dem Match ein

    (regex #"^/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent\$")

Hinweis: Dieser einzufügenden Zeilenumbruchzeichenfolge sollte ein Tabulator ( \t) vorangestellt werden.

Mein fehlgeschlagener Versuch

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

Frage

So beheben Sie den obigen sedBefehl

oder

eine besser lesbare und funktionierende Alternative bereitstellen, die zum Kopieren von einer Website und Einfügen in das Mac OS X-Terminal (Bash) verwendet werden kann, um diese Sandbox-Konfigurationsdatei zu erweitern?

Antwort1

Mit macOS Sed ist das nicht möglich.weil es führende Leerzeichen aus den Zeilen entfernt, die Sie einfügen.

Verwenden von 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

Beachten Sie, dass ich die Ausgabe umgeleitet habe, ~/temp-clamd.sbanstatt die Datei direkt zu bearbeiten (was mit BSD Awk schwierig oder unmöglich ist).

Als Nächstes können Sie mit folgendem Befehl überprüfen, ob die Änderungen Ihren Erwartungen entsprechen:

diff /usr/share/sandbox/clamd.sb ~/temp-clamd.sb

Wenn alles korrekt ist, überschreiben Sie den Inhalt der Originaldatei mit der geänderten Kopie (nichtverwenden mv, wodurch Inode, Berechtigungen und Eigentümer geändert würden):

cat ~/temp-clamd.sb | sudo tee /usr/share/sandbox/clamd.sb

verwandte Informationen