Como processar um arquivo contendo aspas?

0

Eu sei um pouco sobre personagens de escape no BASH. Eu sei que \ irá escapar do próximo caractere, " " irá escapar todos os caracteres, exceto $ e " , e finalmente ' ' irá escapar todos os caracteres, exceto ' . Então, se por exemplo eu tenho texto com algumas aspas simples nele, eu posso colocar "" em torno dele para fazê-lo se comportar como uma única cadeia de texto. O problema que tenho é quando meu arquivo contém caracteres de aspas duplas e simples. Então, eu não posso usar qualquer tipo de citações para escapar disso. Então, como eu pergunto bash para tratá-lo como uma única string?

Contexto: o arquivo /var/mobile/Library/Safari/History.plist do meu iPhone. Contém algo como:

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

Eu quero cat do arquivo, passá-lo por grep para obter a primeira linha contendo o texto string e extrair o URL disso. Mas grep engasga com todas as aspas.

Editar 1: Aqui estão alguns screenshots do nano não conseguindo ler o arquivo. Gato dá saída semelhante. O editor de arquivos gráficos iFile o lê como texto. link Me disseram que isso é o que os arquivos binários fazem. Eu farei algumas experiências.

    
por Michael Mrozek 23.05.2016 / 12:14

2 respostas

2

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 cat não é necessário.

Além disso, é muito melhor usar uma ferramenta com reconhecimento de XML para processar XML.

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

(edição convertida para responder)

Eu usei o comando plutil para converter o plist em texto apropriado, já que era um 'arquivo binário'. Feito isso, grep não teve problemas para gerenciar o arquivo.

    
por 25.05.2016 / 08:22