在 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下写入就足够了(它是一行)

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)

相关内容