Eu sei bastante sobre caracteres de escape no BASH. Eu sei que isso \
escapará do próximo caractere, " "
escapará de todos os caracteres, exceto $
e "
e, finalmente, ' '
escapará de todos os caracteres, exceto '
. Portanto, se, por exemplo, eu tiver um texto com algumas aspas simples, posso colocar " " ao redor dele para fazê-lo se comportar como uma única sequência de texto. O problema que tenho é quando meu arquivo contém caracteres de aspas duplas e simples. Então, não posso usar nenhum tipo de aspas para escapar. Então, como peço ao bash para tratá-lo como uma única string?
Contexto: arquivo /var/mobile/Library/Safari/History.plist do meu iPhone. Ele contém algo como:
<key>
<string>http://example.com/folder/index.html</string>
<string>Title of Webpage which may include ' and "</string>
</key>
Quero cat
passar o arquivo grep
para pegar a primeira linha que contém o texto string
e extrair a URL dele. Mas grep
engasga com todas as citações.
Edição 1: Aqui estão algumas capturas de tela do nano não conseguindo ler o arquivo. Cat fornece resultados semelhantes. O editor gráfico de arquivos iFile o lê como texto. http://cloudrac3r.ddns.net/strange.html Disseram-me que é isso que os arquivos binários fazem. Vou fazer algumas experiências.
Responder1
Se você inserir a string literalmente no comando, poderá escapar dos caracteres à sua vontade.
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
Observe também que isso cat
não é necessário.
Além disso, é muito melhor usar uma ferramenta compatível com XML para processar XML.
xmllint -xpath \
'//key[string=concat("Title of Webpage which may include '\'' and ", '\''"'\'')]' \
/var/mobile/Library/Safari/History.plist
Responder2
(Edição convertida para resposta)
Usei o plutil
comando para converter o plist em texto adequado, pois era um 'arquivo binário'. Feito isso, grep
não tive problemas em gerenciar o arquivo.