[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
- SED: Inserir linhas entre dois paterns., Rodrigo Tenorio, 2014/10/11
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Paulo Bettega, 2014/10/12
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Ronaldo Ferreira de Lima, 2014/10/12
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Rodrigo Tenorio, 2014/10/12
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Paulo Bettega, 2014/10/12
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Paulo Bettega, 2014/10/12
- Re: [shell-script] SED: Inserir linhas entre dois paterns., itamarnet, 2014/10/13
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Ronaldo Ferreira de Lima, 2014/10/13
- Re: [shell-script] SED: Inserir linhas entre dois paterns., itamarnet, 2014/10/13
- Re: [shell-script] SED: Inserir linhas entre dois paterns., Rodrigo Tenorio, 2014/10/13
Re: [shell-script] SED: Inserir linhas entre dois paterns., Paulo Bettega, 2014/10/12