如何处理包含引号的文件?

如何处理包含引号的文件?

我对 BASH 中的转义字符有一定的了解。我知道将\转义下一个字符," "将转义除$和 之外的所有字符",最后' '将转义除 之外的所有字符'。因此,如果我有一些带有单引号 ' 的文本,我可以在它周围放置“”,使其表现得像单个文本字符串。我遇到的问题是当我的文件同时包含双引号和单引号字符时。然后,我无法使用任何类型的引号来转义它。那么我如何让 bash 将其视为单个字符串呢?

上下文:我的 iPhone 的 /var/mobile/Library/Safari/History.plist 文件。它包含如下内容:

  <key>
    <string>http://example.com/folder/index.html</string>
    <string>Title of Webpage which may include ' and "</string>
  </key>

我想要cat将该文件传递grep给包含文本的第一行string并从中提取 URL。但grep所有的引言都让人窒息。

编辑1:以下是nano无法读取文件的一些屏幕截图。 Cat 给出了类似的输出。图形文件编辑器 iFile 将其作为文本读取。 http://cloudrac3r.ddns.net/strange.html 有人告诉我这就是二进制文件的作用。我会做一些实验。

答案1

如果您在命令中按字面输入字符串,则可以随意转义字符。

grep 'Title of Webpage which may include '\'' and "' /var/mobile/Library/Safari/History.plist
grep "Title of Webpage which may include ' and \"" /var/mobile/Library/Safari/History.plist

另请注意,这cat不是必需的。

此外,最好使用支持 XML 的工具来处理 XML。

xmllint -xpath \
    '//key[string=concat("Title of Webpage which may include '\'' and ", '\''"'\'')]' \
    /var/mobile/Library/Safari/History.plist

答案2

(将编辑转换为答案)

我使用该plutil命令将 plist 转换为正确的文本,因为它是一个“二进制文件”。完成后,grep管理文件就没有问题了。

相关内容