を含む行を検索

を含む行を検索

特定の文字列 (これも正規表現パターン) を含む行の後に、正規表現を含む新しい行を挿入することで、1 行 (コピー アンド ペースト) コマンドを使用して Mac OS X サンドボックス ファイルを変更したいと考えています。

編集するファイルにはルート権限が必要であり、次の場所にあります/usr/share/sandbox/clamd.sb

検索行と追加行の両方に、正規表現でありパスを含んでいるため、通常はエスケープされる文字が大量に含まれています。

を含む行を検索

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

注: 場合によっては、文字列の前にタブが付きます。

試合の前にこの行を挿入します

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

注意: 挿入する改行文字列の前にタブ ( \t) を 1 つ追加する必要があります。

私の失敗した試み

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上記のコマンドを修正する方法

または

このサンドボックス構成ファイルを拡張するために、Web サイトからコピーして 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

関連情報