在plist中尋找並取代arry

在plist中尋找並取代arry

我將嘗試尋找並替換 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下就可以寫了(是單行)

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

where 而不是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>
    因為有一個,所以/你必須用\before 和關鍵字 gets 來 保護它<string>com.apple.mail<\/string>。 (您必須對第二個字串套用相同的邏輯)。

  • 此參數-i將取代檔案中的字串,而不將結果顯示在螢幕上。為此,最好在沒有之前嘗試。
  • 在它下面BSD可能很重要參數順序,所以sed ... -i可能不一樣,sed -i ...並給出您發現的錯誤。
  • sudo您可能需要在開頭添加才能獲取根權限,或從運行該命令根外殼,如果您不允許作為普通使用者修改該文件。 (您可以使用 進行檢查ls -l NameOfYourFile)。

筆記

man sed

-我[後綴],- 到位[=後綴]

          edit files in place (makes backup if SUFFIX supplied)

相關內容