Use o GREP para substituir um corpo de texto

0

Qual é a melhor maneira de usar o GREP para substituir texto de in a </div> com walked down the path

The cat in the hat
jdlsknklnvlsdknld       ======>    The cat walked down the path
jkgsabkjkjksjakh
</div>
    
por David L. Rodgers 28.01.2018 / 05:08

2 respostas

3

A correspondência de várias linhas pode ser feita facilmente usando o Perl.

perl -p0e 's# in .*</div># walked down the path.#sm'

Resumidamente,

  • -p0e transforma Perl em um processador de várias linhas de fluxo sed .
  • A parte s#...#...# significa que você deseja substituir todos os caracteres de in a </div> (a primeira cláusula) por walked down the path (a segunda cláusula).
  • sm significa "tratar novos símbolos como todos os outros personagens.

Esta resposta assume que o texto de entrada possui apenas um desses padrões.

As páginas de documentação relevantes podem ser encontradas aqui e aqui no site oficial do Perl.

    
por undercat 28.01.2018 / 16:55
2

Use grep para substituir o texto? Boa sorte com isso.

sed fará isso por você:

sed 's/in the hat/walked down the path/;/The cat/,/<\/div>/ {/The cat/n;d}' file

Notas

  • s/old/new/ replace old com new
  • ; separa os comandos
  • /begin/,/end/ opera dentro de um intervalo da linha com /begin/ até a linha com /end/
  • {} grouping, para comandos a serem usados no intervalo
  • /The cat/n exclui a linha com /The cat/ (não faça nada e leia a próxima linha)
  • d delete (o resto das linhas no intervalo)
por Zanna 28.01.2018 / 08:41