如何處理包含引號的檔案?

如何處理包含引號的檔案?

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

相關內容