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 cat
die Datei durchreichen, grep
um die erste Zeile mit dem Text zu nehmen string
und daraus die URL zu extrahieren. Aber grep
es 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 cat
nicht 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 plutil
Befehl verwendet, um die plist in richtigen Text umzuwandeln, da es sich um eine „Binärdatei“ handelte. Nachdem das erledigt war, grep
hatte ich keine Probleme mit der Verwaltung der Datei.