我對 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
管理文件就沒有問題了。