特定の文字列(正規表現パターンでもある)を含む行の後に、正規表現を含む新しい行を挿入して、1行(コピーして貼り付け)コマンドでMac OS Xサンドボックスファイルを変更したいと思います。
編集するファイルにはroot権限が必要です/usr/share/sandbox/clamd.sb
。
検索行と追加行には両方とも正規表現でパスが含まれているため、通常エスケープする必要がある多くの文字が含まれています。
次を含む行の検索
(regex #"^/private/var/clamav/")
注:場合によっては、文字列の前にタブ文字が続きます。
一致の前にこの行を挿入してください。
(regex #"^/System/Library/PrivateFrameworks/TrustEvaluationAgent.framework/Versions/A/TrustEvaluationAgent\$")
注:挿入する改行の前にはタブ文字(\t
)を付ける必要があります。
私の失敗した試み
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