我对 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
管理文件就没有问题了。