plist 内の配列を検索して置換する

plist 内の配列を検索して置換する

plist 内の配列を検索して置き換えてみます。デフォルトで問題なく配列を書き込むことはできますが、配列を削除することはできません。

plist は次のとおりです。~/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plisty

削除したいもの:

<dict>
<key>LSHandlerPreferredVersions</key>
<dict>
<key>LSHandlerRoleAll</key>
<string>-</string>
</dict>
<key>LSHandlerRoleAll</key>
<string>com.apple.mail</string>
<key>LSHandlerURLScheme</key>
<string>ma​​ilto</string>
</dict>

これを次のように置き換えます:

<dict>
<key>LSHandlerPreferredVersions</key>
<dict>
<key>LSHandlerRoleAll</key>
<string>-</string>
</dict>
<key>LSHandlerRoleAll</key>
<string>com.microsoft.outlook</string>
<key>LSHandlerURLScheme</key>
<string>ma​​ilto</string>
</dict>

インターネットで検索しましたが、解決策が見つかりません ;-) 誰か助けてくれませんか? ご協力をよろしくお願いします、Netzmeister

答え1

以来、プリスト通常のテキストファイルのようですが、Linuxでは1行で十分です。

sed 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt

ここで、 の代わりにAAA.txtを記述する必要がありますfilename
結果は標準出力 (tty作業中の ) に表示されます。

その後、正常に動作するかどうかを確認したら、同じ行にパラメータを追加して、-i内部のファイルを変更することができます。

sed -i 's/<string>com.apple.mail<\/string>/<string>com.microsoft.outlook<\/string>/g' AAA.txt


さらに説明:

 sed -i 's/OLD/NEW/g' NameOfYourFile
  • 上記のコマンドは、ファイル内でNameOfYourFile文字列のすべての出現を検索しOLD、それを文字列に置き換えますNEW

  • あなたは正しく識別する必要がありますキーワード置換したい 、この場合はタグが含まれます: <string>com.apple.mail</string>
    があるため、前/に で保護する必要があり\、キーワードは になります <string>com.apple.mail<\/string>。(2 番目の文字列にも同じロジックを適用する必要があります)。

  • パラメータは、-i結果を画面に表示せずにファイル内の文字列を置き換えます。このため、事前にパラメータなしで試してみることをお勧めします。
  • その下でBSDは、パラメータの順序sed ... -i同じではない可能性がありsed -i ...、見つかったエラーが発生します。
  • sudo最初に追加する必要があるかもしれませんルート権限、またはそのコマンドをルートシェル通常のユーザーとしてそのファイルを変更することが許可されていない場合は、 を使用します ( で確認できますls -l NameOfYourFile)。

ノート

からman sed

-私[サフィックス]、- 所定の位置に[=接尾辞]

          edit files in place (makes backup if SUFFIX supplied)

関連情報