5

基本的に、.plistファイルのエントリを編集するスクリプトを作成できるかどうかを知りたいです。ただし、特定の文字列を置き換えたくはありませんが、プロパティが変更され続けるため、新しい文字列を追加できるように行全体を置き換えます。例:

<string>Something</string>
<key>SomethingElse</key>
<string>Numbers</string>
<key>Entry</key>

そして、その行が現在何を言っているかに関係なく、3行目を次のようなものに変更します。

<string>randomstuffhere</string>

私は数時間探していて、sedを使用することはおそらく可能だと思いますが、例を見た後、それを解読して自分で構築することはできないようです。ありとあらゆる助けをいただければ幸いです。ああ、できればperlの使用は避けたいと思います。

編集:以下を使用すると、ターミナルウィンドウで変更が行われますが、ファイルに保存されていないようです。-iを使用することは明らかにこれを修正する方法ですが、エラーが発生するため、何が間違っているのかわかりません。

sed -n '/SomethingElse/{p;n;s/>.*</>randomstuffhere</;};p' my.plist
4

2 に答える 2

5

defaultsそれを編集するために使用するのがおそらく最も簡単です:

defaults write /abs/path/to/plist SomethingElse "randomstuffhere"

plistファイルへの絶対パスを指定し、ファイル名から「.plist」を除外する必要があることに注意してください。

また(コメントで指摘されているように)これはplistファイルをバイナリplist形式のバリアントに変換する傾向があります。適切な.plist読み取りフレームワークを使用するプログラムはこれを正常に読み取りますが、人間が読める形式ではなくなります。XML形式のバリアントにしたい場合は、を使用して変換できますplutil -convert xml1 /path/to/plist.plist

PlistBuddyまたは、次の代わりに使用できますdefaults

/usr/libexec/PlistBuddy -c "Set :SomethingElse 'randomstuffhere'" /path/to/plist.plist
于 2012-09-22T00:49:25.190 に答える
0

それで、それはあなたが変更したい3番目の行ですか?

 sed -i"" '3{;s\:.*:<string>randomstuffhere</string>:;}' .plist

sedosxはこのオプションをサポートしていると思い-iますが、バックアップ拡張機能を使用して上書きしないように指示する必要があります。一部のsedでは、s ///の最初の文字('/'でない場合)をエスケープする必要があります\:。必要なのは:

sed '3{....}' file > newFileファイルの内容を危険にさらす前と同じようにこれをテストします。そして、テストする-i""には、コピーで作業します。

数字が含まれる行を常に変更する場合は、次を使用します。

sed -i"" '\:<string>Numbers.*$:/<string>randomstuffhere</string>:` .plist

IHTH。

于 2012-09-22T00:36:45.143 に答える