Extrai texto entre dois caracteres (entrada de múltiplas linhas) [duplicado]

5

Se eu tiver o texto:

aaaaaaaaa
#some info
other rows
end row#
another info

Como eu poderia extrair apenas o texto entre os caracteres # obtenção somente:

some info
other rows
end row

Eu estava tentando com sed desta maneira:

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n -e '/\#/,/\#/p'

... mas também me dá o caractere # ... existe uma maneira de remover # usando sed ? Obrigado antecipadamente!

    
por tamarindoz 17.10.2018 / 12:26

2 respostas

5

Você pode usar perl :

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |\
perl -0777 -ne '/#([^#]*)#/ && print $1,"\n"; '

Explicação:

  • -0777 slurp o arquivo inteiro como uma linha (ativa a correspondência de várias linhas)
  • /#([^#]*)#/ corresponde a não-# caracteres [^#] entre # e, com os colchetes, adiciona-a como primeiro grupo correspondente.
  • && print $1,"\n" se encontrado, imprima o primeiro grupo correspondente e uma nova linha final.
por 17.10.2018 / 12:36
5

Ligeira adaptação ao seu sed one liner:

echo -e "aaaaaaaaa\n#some info\nother rows\nend row#\nanother info" |
sed -n '/^#/,/#$/ {s/#//;p;}'

Saída:

some info
other rows
end row
    
por 17.10.2018 / 13:09

Tags