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

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

Re: [shell-script] Sed :: Não substituir entre dois intervalos.


From: Rodrigo Boechat
Subject: Re: [shell-script] Sed :: Não substituir entre dois intervalos.
Date: Sun, 14 Jul 2013 01:38:04 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7

Depois de muito bater cabeça, cheguei na solução:

sed '/\#f1\#/ ! { /\#ff1\#/ ! { /\#f2\#/ ! { /\#ff2\#/ ! { s/qwerty/TESTE/g } } } }' 01

Aqui funcionou como o esperado.
Alfredo, obrigado! Foi seu link que me deu pistas para chegar na solução.

Acabou que não precisou de controle de tudo que eu achava que iria precisar.

Muito obrigado!

Em Sáb 13 Jul 2013 16:34:15 BRT, Rodrigo Boechat escreveu:
Alfredo, obrigado pela resposta!

Eu estive lendo.
Aliás muito bom o material disposto ali.

Infelizmente não consegui ainda fazer funcionar.
Imaginando que eu terei que usar controle de fluxo e marcadores,
comecei testes baseado neste aqui:

3.16. Extrair trecho que pode ou não estar na mesma linha
sed -n '/segundo/{:a;/quarto/!{N;ba;};p;}'

Se eu entendi bem o exemplo acima funciona assim:
/segundo/ = Procura por segundo;
{ = Abre bloco de comandos;
:a; = cria um marcador chamado "a";
/quarto/ = procura por quarto;
! = nega a procura anterior;
{ = abre um segundo bloco de comandos;
N; = junta com a próxima linha;
ba; = volta a execução para o marcador "a";
}; = fecha o segundo bloco de comandos;
p; = imprime caso encontre "quarto";
} = fecha o primeiro bloco de comandos.

Mas tudo que eu fiz nada funcionou.
Desconfio que não compreendi a lógica de funcionamento ainda.

Se você souber, pode me ensinar?

Grato!


Em Sáb 13 Jul 2013 09:44:52 BRT, Alfredo Casanova escreveu:
De cabeça n consigo resolver, mas tem boas referências do sed aqui:

http://thobias.org/doc/sosed.html

Que podem te ajudar
Em 13/07/2013 06:32, "Rodrigo Boechat"
<address@hidden>
escreveu:

**


Pessoal, bom dia!

Como eu faria para não aplicar substituições entre dois intervalos?

Exemplo:

cat >01<<EOF
qwerty
qwerty
#f1#qwerty
qwerty#ff1#
qwerty
#f2#qwerty#ff2#
qwerty
qwerty
qwerty
EOF

Tentando da forma que descrevo abaixo, obtive o seguinte erro:
sed: -e expressão #1, caractere 29: comando desconhecido: `|'

sed '
/^\#f1\#/,/^\#ff1\#/ | /^\#f2\#/,/^\#ff2\#/ ! {
s/qwerty/TESTE/g
}' 01

Andei pesquisando na net e ainda não achei algo parecido.
Preciso encontrar um intervalo, #f1# e#ff1#, ou o outro, #f2# e #ff2#,
para não executar o s/qwerty/TESTE/g, dentro deles.

Alguém sabe como me ajudar?

Desde jáagradeço!

Rodrigo Boechat

[As partes desta mensagem que não continham texto foram removidas]





[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação,
como perl, C etc. Quem insistir em não seguir esta regra será
moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

Links do Yahoo! Grupos





reply via email to

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