Usando regex Perl em várias linhas

1

Gostaria de substituir todas as ocorrências disso em um arquivo:

ab
ba

Com isso:

a a

Eu tentei o óbvio:

$ perl -i -p -e 's/ab\nba/a a/' file.txt

Sem sucesso. Como isso é feito?

Não consigo encontrar perguntas que articulem adequadamente essa questão.

    
por Robz 09.03.2015 / 23:55

1 resposta

1

Sem outras opções, -p processa a entrada linha por linha. Nenhuma linha pode conter nada após o \n . Você precisa alterar o separador de registro:

perl -i~ -0pe 's/ab\nba/a a/' file.txt
  • -i~ modificará o arquivo "in place", deixando um backup para trás (chamado file.txt~ )
  • -0 torna o caractere -p o separador de registro de entrada. O importante é que não ocorra a substituição da string, por isso nunca lerá apenas uma parte dela.
  • $_ lê o registro do arquivo por registro, e depois de ler cada um, ele executa o código e imprime a variável padrão -e
  • %code% apenas introduz o código.
por 10.03.2015 / 00:03

Tags