Como ler por várias linhas em vez de linha por linha

2

Eu vejo que no meu código eu posso modificar uma linha se o código inteiro for baseado nessa linha. Exemplo: <p class="example">this is an example Happy Holidays</p> . No entanto, se a tag </p> estiver localizada em uma segunda linha, o código passará essa linha.

Qual é a melhor maneira de detectar até que a linha termine para determinadas tags?

    
por DᴀʀᴛʜVᴀᴅᴇʀ 27.12.2012 / 15:43

2 respostas

0

Utilitários de texto trabalham em linhas (linhas de texto que são sequências (não muito longas) de caracteres não-NUL terminadas por um caractere de nova linha). awk é o utilitário padrão que pode ser dito para trabalhar no registro separado por outras coisas além de caracteres de nova linha, é por isso que awk fala de registros ao invés de linhas .

Por exemplo, você pode usar > como separador registro . Como em:

awk -v RS='>' ...

Outra abordagem é trocar o caractere que você deseja usar como o separador de registro (para outras ferramentas além de awk ) com o caractere de nova linha:

... |
  tr '\n>' '>\n' |
  sed ... |
  other-text-utility... |
  tr '\n>' '>\n'

Eles assumem que as coisas que você deseja modificar não incluem tags HTML aninhadas, pois elas iniciariam novos registros.

Isso é substituir

    
por 27.12.2012 / 23:13
2

A resposta simples é: não use shell para analisar XML . Use um analisador de XML, por exemplo um dos numerosos para o Perl: XML :: Parser , XML::Simple ou qualquer outro idioma. Para HTML, HTML :: Parser é uma opção (se ficarmos com Perl) .

Se você quiser usar bash , você pode jogar com o read integrado e um loop um pouco.

    
por 27.12.2012 / 15:54