Discussion:
[shell-script] Substituir linha abaixo da expressão
Otthon Coelho otthon@ymail.com [shell-script]
2018-03-23 01:38:11 UTC
Permalink
Olá pessoal.

Preciso substituir a linha abaixo das ocorrências, alguém pode ajudar?

O arquivo possui várias linhas repetidas abaixo:

       <domain $hotmail.com>
              max-msg-rate 4/m
        </domain>
        <domain yahoo.$intl>
              max-msg-rate 4/m
        </domain>
        <domain $gmail.$com>
              max-msg-rate 4/m
        </domain>
.....
       <domain $hotmail.com>
              max-msg-rate 4/m
        </domain>
        <domain yahoo.$intl>
              max-msg-rate 4/m
        </domain>
        <domain $gmail.$com>
              max-msg-rate 4/m
        </domain>



Quero trocar todos os max-msg-rate 4/m dentro do arquivo, mas apenas que estejam abaixo de $gmail.$com (substituir o valor da linha abaixo quando achar a expressão). Não posso usar sed ou tr simples porque trocaria todas os valores de tudo...


Muito Obrigado 
Otthon Coelho otthon@ymail.com [shell-script]
2018-03-22 18:05:06 UTC
Permalink
Olá pessoal.
Preciso substituir a linha abaixo das ocorrências, alguém pode ajudar?

O arquivo possui várias linhas repetidas abaixo:
       <domain $hotmail.com>              max-msg-rate 4/m        </domain>        <domain yahoo.$intl>              max-msg-rate 4/m        </domain>        <domain $gmail.$com>
              max-msg-rate 4/m        </domain>...       <domain $hotmail.com>              max-msg-rate 4/m        </domain>        <domain yahoo.$intl>              max-msg-rate 4/m        </domain>        <domain $gmail.$com>
              max-msg-rate 4/m        </domain>

Quero trocar todos os max-msg-rate 4/m dentro do arquivo, mas apenas que estejam abaixo de $gmail.$com (substituir o valor da linha abaixo quando achar a expressão). Não posso usar sed ou tr simples porque trocaria todas os valores de tudo...


Muito Obrigado 
Terminal Root terminalroot.com.br@gmail.com [shell-script]
2018-03-23 13:05:42 UTC
Permalink
O arquivo precisa necessariamente ficar na ordem ? Porque vc poderia usar
esse comando e a saída dele jogar pro final do arquivo e depois deletar as
linhas que possuem a string que você alterou. A princípio, Sed resolve sim,
mais ou menos isso:

*sed -n '/gmail/{N;p;}' arquivo.txt | sed 's/max-msg-rate 4\/m/ISSO/g'*
Post by Otthon Coelho ***@ymail.com [shell-script]
Olá pessoal.
Preciso substituir a linha abaixo das ocorrências, alguém pode ajudar?
<domain $hotmail.com>
max-msg-rate 4/m
</domain>
<domain yahoo.$intl>
max-msg-rate 4/m
</domain>
<domain $gmail.$com>
max-msg-rate 4/m
</domain>
...
<domain $hotmail.com>
max-msg-rate 4/m
</domain>
<domain yahoo.$intl>
max-msg-rate 4/m
</domain>
<domain $gmail.$com>
max-msg-rate 4/m
</domain>
Quero trocar todos os max-msg-rate 4/m dentro do arquivo, mas apenas que
estejam abaixo de $gmail.$com (substituir o valor da linha abaixo quando
achar a expressão). Não posso usar sed ou tr simples porque trocaria todas
os valores de tudo...
Muito Obrigado
Terminal Root terminalroot.com.br@gmail.com [shell-script]
2018-03-23 13:57:57 UTC
Permalink
Othon, achei a solução pro seu problema

*sed '/gmail/!b;n;c\\t\tALTERADO' arquivo.txt*

Testa aí!
Post by Terminal Root ***@gmail.com [shell-script]
O arquivo precisa necessariamente ficar na ordem ? Porque vc poderia usar
esse comando e a saída dele jogar pro final do arquivo e depois deletar as
linhas que possuem a string que você alterou. A princípio, Sed resolve sim,
*sed -n '/gmail/{N;p;}' arquivo.txt | sed 's/max-msg-rate 4\/m/ISSO/g'*
Post by Otthon Coelho ***@ymail.com [shell-script]
Olá pessoal.
Preciso substituir a linha abaixo das ocorrências, alguém pode ajudar?
<domain $hotmail.com>
max-msg-rate 4/m
</domain>
<domain yahoo.$intl>
max-msg-rate 4/m
</domain>
<domain $gmail.$com>
max-msg-rate 4/m
</domain>
...
<domain $hotmail.com>
max-msg-rate 4/m
</domain>
<domain yahoo.$intl>
max-msg-rate 4/m
</domain>
<domain $gmail.$com>
max-msg-rate 4/m
</domain>
Quero trocar todos os max-msg-rate 4/m dentro do arquivo, mas apenas que
estejam abaixo de $gmail.$com (substituir o valor da linha abaixo quando
achar a expressão). Não posso usar sed ou tr simples porque trocaria todas
os valores de tudo...
Muito Obrigado
otthon@ymail.com [shell-script]
2018-03-23 14:12:15 UTC
Permalink
Muito obrigado ajudou demais.



Consigo adaptá-lo tambémpara alterar trechos dentro do arquivo? linha início/fim...
Terminal Root terminalroot.com.br@gmail.com [shell-script]
2018-03-23 17:57:05 UTC
Permalink
Sim
Post by ***@ymail.com [shell-script]
Muito obrigado ajudou demais.
Consigo adaptá-lo tambémpara alterar trechos dentro do arquivo? linha
início/fim...
Loading...