Tratamento de arquivo [RESOLVIDO]

1. Tratamento de arquivo [RESOLVIDO]

Luis Zanuncio
zanuncio

(usa CentOS)

Enviado em 04/01/2018 - 16:39h

Pessoal, boa tarde.

Tenho um arquivo, com a composição abaixo:

net use b: \\batata\teste
net use e: \\batata\teste1
net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4

Quero colocar nesse arquivo a palavra "rem" no início, como está na última linha, das linhas que não possuem. Porém, não pode ficar repetido (rem rem net use), deve conter "batata" e não pode fazer na linha que contém "b:"

Resumindo, preciso que fique assim, todas as linhas que não possuem "rem", "b:" e que possuem "batata":

net use b: \\batata\teste
rem net use e: \\batata\teste1
rem net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4

Nem sempre haverá essa composição, então não posso fazer nada fixo pela posição/número da linha. Estava usando o comando abaixo, mas só consigo filtrar uma coisa de cada vez. Nesse caso, filtrei as linhas que não têm "b:".

sed '/b:/! s/net/rem net/g' /home/arquivo.txt

Obs: em outra situação, posso precisar inverter as linhas com "batata" e "uva", mas as outras restrições continuam valendo.

net use b: \\batata\teste
net use e: \\batata\teste1
net use e: \\batata\teste3
rem net use h: \\uva\teste2
rem net use h: \\uva\teste4

Alguém pode me ajudar?




  


2. Re: Tratamento de arquivo [RESOLVIDO]

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 04/01/2018 - 20:27h

$ cat arquivo.txt 
net use b: \\batata\teste
net use e: \\batata\teste1
net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4

$ sed '/batata/s/^/rem /;/b:/s/^rem //' arquivo.txt
net use b: \\batata\teste
rem net use e: \\batata\teste1
rem net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4



3. Re: Tratamento de arquivo

Luis Zanuncio
zanuncio

(usa CentOS)

Enviado em 05/01/2018 - 08:01h

Ryuk escreveu:

$ cat arquivo.txt 
net use b: \\batata\teste
net use e: \\batata\teste1
net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4

$ sed '/batata/s/^/rem /;/b:/s/^rem //' arquivo.txt
net use b: \\batata\teste
rem net use e: \\batata\teste1
rem net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4



Deu certo, mas quando executei novamente o mesmo comando, ficou assim :

net use b: \\batata\teste
rem rem net use e: \\batata\teste1
rem rem net use e: \\batata\teste3
net use h: \\uva\teste2
rem net use h: \\uva\teste4

Uma vez que já tenha "rem" no início, não posso adicionar mais vezes

Segui sua lógica, e adicionei um comando que resolveu meu problema:

$ sed '/batata/s/^/rem /;/b:/s/^rem //;s/rem.*rem/rem/' arquivo.txt

Muito obrigado.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts