shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] SED: Inserir linhas entre dois paterns.


From: Paulo Bettega
Subject: Re: [shell-script] SED: Inserir linhas entre dois paterns.
Date: Sun, 12 Oct 2014 23:54:56 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:31.0) Gecko/20100101 Thunderbird/31.1.2

Pessoal, desculpem a insistência no assunto, mas estava pesquisando
sobre o casamento multi-linha com grep e pcregrep (acho que o sed não
reconhece o PCRE), e vi num post do Stackoverflow referência à
opção -z do grep. Lembrei que o sed também tem essa opção.
Por curiosidade testei e não é que deu certo.
Global 'g' e 1,2,etc também funcionam.

cat teste
LINHAS
LINHAS
AAA
BBB
LINHAS
AAA
EEE
LINHAS
LINHAS
LINHAS

sed -z 's/\(AAA\)\n\(EEE\)/\1\nBBB\nCCC\nDDD\n\2/' teste
LINHAS
LINHAS
AAA
BBB
LINHAS
AAA
BBB
CCC
DDD
EEE
LINHAS
LINHAS
LINHAS

Abraços Paulo Bettega


On 12-10-2014 17:25, Paulo Bettega address@hidden [shell-script] wrote:
Olá Ronaldo, é verdade, o Rodrigo tem o melhor cenário pois diz que não
tem linhas seguidas e só quer substituir a primeira ocorrência.
Fazendo os teste aqui e vendo a tua solução é que eu percebi o tamanho
da encrenca pra fazer isso usando sed.

Como o problema é substituir só a primeira ocorrência, pensei em indicar
a linha pesquisando com grep, mas daí já não é mais 'sed puro'.

sed "$(grep -n -A1 AAA testeComErro|grep -m1 'EEE'|cut -d- -f1) 
s/EEE/BBB\nCCC\nDDD\n&/" testeComErro

Abraços Paulo Bettega

On 12-10-2014 16:50, Ronaldo Ferreira de Lima address@hidden [shell-script] 
wrote:
Saudações Paulo,

On Sun, Oct 12, 2014 at 04:20:06PM -0300, Paulo Bettega address@hidden 
[shell-script] wrote:
  > Nesse caso minha idéia falha, pois perde as duas linhas AAA
  > seguidas, com EEE depois
  >
  > sed '/AAA/ {N;s/EEE/&\nBBB\nCCC\nDDD/;}' testeComErro
No cenário que o Rodrigo descreveu, esse problema não ocorre, então essa
solução funciona bem, precisa apenas trocar o '&' de lugar para completar
a sequência corretamente: "AAA\nBBB\nCCC\nDDD\nEEE", da forma como está,
ele faz: "AAA\nEEE\nBBB\nCCC\nDDD".

  > Abraços Paulo Bettega

[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
http://tecnoveneno.blogspot.com



reply via email to

[Prev in Thread] Current Thread [Next in Thread]