foo
I love
Stack Exchange
bar
Some junk
lines
foo
Welcome to the
world of
Bash
bar
foo
Elon Musk
rocks
Sim, não há bar
complementação foo
no final do arquivo
A saída necessária é
I love Stack Exchange
Welcome to the world of Bash
Elon Musk rocks
Portanto, remova todos os caracteres de nova linha, entre ^foo
e ^bar
ou entre ^foo
e end of file
onde não hábar
Perl ao resgate!
-n
lê a entrada linha por linha..
é o operador de intervalo, ele retorna o número de linha relativo para cada linha em um bloco. A última linha foiE0
anexada a ele.Com
awk
:Para corresponder em linhas com
foo
a primeira palavra, substitua$0 == "foo"
por$1 == "foo"
; para corresponder em linhas que começam comfoo
, substitua por/^foo/
(abreviação de$0 ~ /^foo/
).Você poderia fazer desta forma também:
a) Este é um
POSIX-sed
código compatível em que armazenamos as linhas intermediárias (!/foo/ e !/bar/) na área de espera.b) e com
Perl
como mostradoExplicação:
/foo/
e terminando com/bar/
, ambos ocorrendo em linhas separadas.@A
. Após armazenar, volte para ler o próximo registro desde que não seja eof./bar/
oueof
, tomamos a ação de imprimir o que está dentro@A
e também esvaziá-lo, preparando-o para o próximo ciclo de coleta.