Como processar um arquivo contendo cotações?

Como processar um arquivo contendo cotações?

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 catpassar o arquivo greppara pegar a primeira linha que contém o texto stringe extrair a URL dele. Mas grepengasga 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 catnã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 plutilcomando para converter o plist em texto adequado, pois era um 'arquivo binário'. Feito isso, grepnão tive problemas em gerenciar o arquivo.

informação relacionada