Wie verarbeite ich eine Datei, die Anführungszeichen enthält?

Wie verarbeite ich eine Datei, die Anführungszeichen enthält?

Ich weiß einiges über Escapezeichen in BASH. Ich weiß, dass \das nächste Zeichen escaped wird, alle Zeichen außer und " "escaped werden und schließlich alle Zeichen außer escaped werden . Wenn ich also beispielsweise einen Text mit einigen einfachen Anführungszeichen ' habe, kann ich ihn mit " " umgeben, damit er sich wie eine einzelne Textzeichenfolge verhält. Das Problem tritt auf, wenn meine Datei sowohl doppelte als auch einfache Anführungszeichen enthält. Dann kann ich keine der beiden Anführungszeichen verwenden, um sie zu escapen. Wie bringe ich also Bash dazu, sie als einzelne Zeichenfolge zu behandeln?$"' ''

Kontext: Die Datei /var/mobile/Library/Safari/History.plist meines iPhones. Sie enthält etwa Folgendes:

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

Ich möchte catdie Datei durchreichen, grepum die erste Zeile mit dem Text zu nehmen stringund daraus die URL zu extrahieren. Aber grepes verschluckt sich an all den Anführungszeichen.

Bearbeitung 1: Hier sind einige Screenshots von Nano, der die Datei nicht lesen kann. Cat gibt eine ähnliche Ausgabe aus. Der grafische Dateieditor iFile liest sie als Text. http://cloudrac3r.ddns.net/strange.html Mir wurde gesagt, dass dies mit Binärdateien geschieht. Ich werde ein wenig experimentieren.

Antwort1

Wenn Sie die Zeichenfolge wörtlich in den Befehl eingeben, können Sie die Zeichen nach Belieben maskieren.

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

Beachten Sie auch, dass dies catnicht erforderlich ist.

Darüber hinaus ist es viel besser, zur Verarbeitung von XML ein XML-fähiges Tool zu verwenden.

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

Antwort2

(Bearbeitung in Antwort umgewandelt)

Ich habe den plutilBefehl verwendet, um die plist in richtigen Text umzuwandeln, da es sich um eine „Binärdatei“ handelte. Nachdem das erledigt war, grephatte ich keine Probleme mit der Verwaltung der Datei.

verwandte Informationen