Perl one-liner para substituir um bloco de código

0

Eu tenho um arquivo foo.txt

hello world
      first line to change
        second line to change

Eu gostaria de escrever um perl one-liner que altere foo.txt para ler

hello world
      this is
        my new text

Eu tentei

perl -p -i -e 's/      first line to change\n        second line to change/      this is\n        my new text/g' foo.txt

mas esse script não faz nada para o arquivo. O que há de errado com o meu one-liner?

    
por Brian Fitzpatrick 24.08.2015 / 07:05

1 resposta

2

Por predefinição, perl lê uma entrada de linha de cada vez, pelo que o seu regex nunca coincide. Para trabalhar com várias linhas de entrada, você tem duas opções.

Ativar modo de parágrafo:

perl -i.bak -00pe ...

ou sorve o arquivo inteiro:

perl -i.bak -0777pe ...

(Qualquer valor acima de -0400 fará com que perl faça slurp no arquivo inteiro, -0777 é usado para a convenção)

    
por 24.08.2015 / 07:18