特定の文字列 (これも正規表現パターン) を含む行の後に、正規表現を含む新しい行を挿入することで、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