Sé bastante sobre los personajes de escape en BASH. Sé que \
escapará del siguiente carácter, " "
escapará de todos los caracteres excepto $
y "
, y finalmente ' '
escapará de todos los caracteres excepto '
. Entonces, si, por ejemplo, tengo texto con algunas comillas simples ', puedo poner " " alrededor para que se comporte como una sola cadena de texto. El problema que tengo es cuando mi archivo contiene comillas dobles y simples. Entonces, no puedo usar ningún tipo de comillas para escapar. Entonces, ¿cómo le pido a bash que lo trate como una sola cadena?
Contexto: archivo /var/mobile/Library/Safari/History.plist de mi iPhone. Contiene algo como:
<key>
<string>http://example.com/folder/index.html</string>
<string>Title of Webpage which may include ' and "</string>
</key>
Quiero acceder cat
al archivo, pasarlo grep
para tomar la primera línea que contiene el texto string
y extraer la URL de allí. Pero grep
se ahoga con todas las citas.
Edición 1: aquí hay algunas capturas de pantalla de nano que no pudo leer el archivo. Cat da un resultado similar. El editor gráfico de archivos iFile lo lee como texto. http://cloudrac3r.ddns.net/strange.html Me han dicho que esto es lo que hacen los archivos binarios. Haré algunos experimentos.
Respuesta1
Si ingresa la cadena literalmente en el comando, puede escapar los caracteres a su voluntad.
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
También tenga en cuenta que cat
no es necesario.
Además, es mucho mejor utilizar una herramienta compatible con XML para procesar XML.
xmllint -xpath \
'//key[string=concat("Title of Webpage which may include '\'' and ", '\''"'\'')]' \
/var/mobile/Library/Safari/History.plist
Respuesta2
(Edición convertida para responder)
Utilicé el plutil
comando para convertir el plist en texto adecuado ya que era un "archivo binario". Una vez hecho esto, grep
no tuve problemas para administrar el archivo.