次を含む行の検索

次を含む行の検索

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

すべてが正しい場合は、元のファイルの内容を変更したコピー(いいえを使用すると、mvinode、権限、所有者が変更されます。

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

関連情報