我將嘗試尋找並替換 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>mailto</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>mailto</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)