Salva o texto do arquivo entre dois caracteres e salva a saída no arquivo?

0

Eu tenho um arquivo com o seguinte tipo de texto:

@ heading with some text
the.actual.text.of.choice
which.can.be.several.lines
in.length.with.no.pattern
+
more.text.that.i.want.to
remove.several.lines.long

Eu tentei com o seguinte:

perl -pe '^@ .* $+' input_file.txt > output_file.txt

que eu leio como: '@ no início da linha, seguido por qualquer número de caracteres e terminando com + no final da linha'. Mas recebi o seguinte erro:

syntax error at -e line 1, near "^"
Execution of -e aborted due to compilation errors.

Desde que eu sou bastante novo com regex, você poderia por favor me dizer onde estou errado? E existe uma maneira de fazer isso diretamente com grep ? Talvez com as opções -f ou -E ?

    
por Gigiux 31.10.2015 / 14:39

1 resposta

0

do{local $/; <STDIN>} lê todas as entradas em uma string.

=~ /^@[^+]+\+/gm corresponde à string contra a regex (uma linha que começa com @ , seguida por qualquer caractere, exceto + , terminando com + ).

print $& imprime todo o jogo.

cat input_file.txt | perl -e 'do{local $/; <STDIN>} =~ /^@[^+]+\+/gm; print $&' > output_file.txt
    
por 31.10.2015 / 16:09