我将尝试在 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
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>
。(您必须将相同的逻辑应用于第二个字符串)。- 该参数
-i
将替换文件中的字符串,但不在屏幕上显示结果。为此,最好在不使用之前先尝试一下。 - 在
BSD
这之下可能很重要参数顺序,所以sed ... -i
可能不一样sed -i ...
并给你发现的错误。 - 您可能需要
sudo
在开头添加以获取root 权限或从根外壳,如果您作为普通用户无权修改该文件。(您可以使用 检查ls -l NameOfYourFile
)。
笔记
从man sed
-我[后缀],- 到位[=后缀]
edit files in place (makes backup if SUFFIX supplied)