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: Ronaldo Ferreira de Lima
Subject: Re: [shell-script] SED: Inserir linhas entre dois paterns.
Date: Sun, 12 Oct 2014 16:43:52 -0300
User-agent: mutt-ng/devel-r804 (Linux)

On Sun, Oct 12, 2014 at 04:14:33PM -0300, Rodrigo Tenorio address@hidden 
[shell-script] wrote:
[...]
> Ronaldo,
> 
> Camarada, o caso é para modificar a primeira ocorrência e realmente deixar o
> resto do arquivo intacto.
> Não entendi o sed completamente:
> 1 {
> x;
> s/.*/NAO/;
> x;
> };
> :a;
> /^AAA$/ {
> x;/SIM/{x;bb;};x;
> n;
> s/^EEE$/BBB\nCCC\nDDD\n&/;
> Ta;
> x;s/NAO/SIM/;x;
> }
> :b
> 
> Se não for incomodo, poderia me explicar de maneira mais detalhada?
> Essa parte de hold space e patern space me confundiram...
> E não funcionou.
Se o erro for:

    sed: -e expression #1, char 96: extra characters after command

é porque esqueci de inserir quantidade correta de vírgulas para usar em
1liner, o código acima executei em um sed-script mesmo.

No primeiro bloco de comandos, '1{x;s/.*/NAO/;x;}', mandamos armazenar a
palavra  "NAO"  no  hold  space  para que,  a  cada  padrão  encontrado,
perguntemos  se  o conteúdo  do  hold  space  ainda  é "NAO".  Quando  a
substituição é realizada,  também substituimos o conteúdo  do hold space
para "SIM" (qualquer  coisa diferente de "NAO"  funcionaria neste caso),
isso  fará a  próxima  execução pular  para o  label  ":b" sem  executar
substituição alguma.  Com este  tipo de  abordagem temos  maior controle
sobre quais substituições  iremos fazer, como por  exemplo, substituir o
"quinto"  e o  "oitavo" padrão  encontrado. Obs.:  é desagradável  ficar
escrevendo os  contadores manualmente. Se  chegar em algo  assim, talvez
seja melhor  buscar outras  alternativas como  o awk  que resolve  bem o
problema também.

> E o também o sed sugerido em segundo não funcionou.
> sed
> ':a;N;$!Ban;s/\(^\|\n\)\(AAA\)\n\(EEE\)\(\n\|$\)/\1\2\nBBB\nCCC\nDDD\n\3\4/'
> testeComErro
> 
> E eu não compreendi a parte "$!Ban;".
Foi erro  de digitação,  deveria ser  '$!ba', ou  seja, "só não retorne
para o rótulo ':a' na última linha".

[]'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]