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: Sat, 13 Jul 2013 16:34:15 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130623 Thunderbird/17.0.7

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]