como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

1. como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

ronald santos
ronaldsantos

(usa Fedora)

Enviado em 08/07/2013 - 12:00h

Bom dia
Eu estou com uma grande duvida eu preciso saber como eu faço para o sed ler uma lista de linhas de um arquivo chamado excluir.txt e excluir as linhas que forem iguais a do arquivo excluir.txt que estão um arquivo chamado original.txt.
preciso saber se tem como fazer isso.
se alguem puder me ajudar eu agradeço.
eu estou usando o fedora 14.


  


2. MELHOR RESPOSTA

Fernando
phoemur

(usa Debian)

Enviado em 09/07/2013 - 22:27h

Os dois comandos que eu te passei anteriormente estão funcionando como o que você pediu, testei aqui inclusive...
Mas eles tratam a linha inteira e não campo por campo... Pois foi assim que você disse que deveria ser...


sed '/^$/d' excluir.txt | while read LINE; do sed -i "/$LINE/d" original.txt; done

sed 's/[\/"$^!|()#*]/\./g' excluir.txt | xargs -r -I'STRING' sed -i '/STRING/d' original.txt


Basicamente os dois comandos lêem o arquivo excluir.txt e jogam a saída na regex do outro sed (via read ou xargs) pra deletar a linha do original.txt... Mas casando cada linha inteira...

Tem um milhão de jeitos de fazer isso...

até assim:

xargs -L1 -I'STRING' < excluir.txt sed -i '/STRING/d' original.txt


Qual a sua dúvida?

3. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 08/07/2013 - 12:12h

ronaldsantos escreveu:

Bom dia
Eu estou com uma grande duvida eu preciso saber como eu faço para o sed ler uma lista de linhas de um arquivo chamado excluir.txt e excluir as linhas que forem iguais a do arquivo excluir.txt que estão um arquivo chamado original.txt.
preciso saber se tem como fazer isso.
se alguem puder me ajudar eu agradeço.
eu estou usando o fedora 14.


Já deu uma olhada no comando diff? Ele vai fazer isso de um modo mais simples do que usando o sed...

--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


4. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

ronald santos
ronaldsantos

(usa Fedora)

Enviado em 08/07/2013 - 13:05h

ainda não..
eu sou iniciante em linux e não tenho experiencia c pode me dar um caminho para estudar o diff ou um exemplo?


5. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 08/07/2013 - 13:07h

ronaldsantos escreveu:

ainda não..
eu sou iniciante em linux e não tenho experiencia c pode me dar um caminho para estudar o diff ou um exemplo?


 $ man diff  

http://www.vivaolinux.com.br/dica/diff-Comando-com-exemplos

--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


6. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 08/07/2013 - 16:52h

uma forma rudimentar seria:


sed '/^$/d' excluir.txt | while read LINE; do sed -i "/$LINE/d" original.txt; done


contudo não pode ter caracteres especiais como / \ " ' ^ $ nas linhas do arquivo se não dá problema...

por isso o diff é melhor, mas você pode desenvolver o comando pra tratar estas questões


7. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 09/07/2013 - 00:09h

Assim deu uma minimizada no problema


sed 's/[\/"$^!()#*]/\./g' excluir.txt | xargs -r -I'STRING' sed -i '/STRING/d' original.txt



8. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

ronald santos
ronaldsantos

(usa Fedora)

Enviado em 09/07/2013 - 13:27h

lcavalheiro escreveu:

ronaldsantos escreveu:

ainda não..
eu sou iniciante em linux e não tenho experiencia c pode me dar um caminho para estudar o diff ou um exemplo?


 $ man diff  

http://www.vivaolinux.com.br/dica/diff-Comando-com-exemplos

--
Cordialmente,
lcavalheiro - http://my.opera.com/lcavalheiro/blog/
93 93/93


Muito obrigado eu ou dar uma olhada no link


9. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

ronald santos
ronaldsantos

(usa Fedora)

Enviado em 09/07/2013 - 13:31h

phoemur escreveu:

Assim deu uma minimizada no problema


sed 's/[\/"$^!()#*]/\./g' excluir.txt | xargs -r -I'STRING' sed -i '/STRING/d' original.txt


Muito brigado, pelo codigo que vc me passou, so me tire uma duvida esse codigo

sed 's/[\/"$^!()#*]/\./g' excluir.txt | xargs -r -I'STRING' sed -i '/STRING/d' original.txt


ele tratato todos os caracteres pq no meu arquivo de texto, um linha contem varios campos que são separados por uma "|".
ex.:

|primeio campo|segundo campo| terceiro campo|



10. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 09/07/2013 - 20:07h

O arquivo com esses campos é o original ou o excluir?

Teria que ver o conteúdo dos dois arquivos pra fazer um comando que funcione bem...


11. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

ronald santos
ronaldsantos

(usa Fedora)

Enviado em 09/07/2013 - 21:59h

phoemur escreveu:

O arquivo com esses campos é o original ou o excluir?

Teria que ver o conteúdo dos dois arquivos pra fazer um comando que funcione bem...


Na verdade os dois arquivos contem a mesma estrutura de linha
por exemplo no arquivo original tem 2 linhas:

|ronald|ferreira|dos|santos|
|teste|teste|teste|teste|teste|

e no arquivo excluir.txt contem duas linhas:

|teste|teste|teste|teste|teste|
|teste1|teste1|teste1|teste1|

ai eu queria fazer uma forma com que o sed lê-se o arquivo exluir e verifica-se no arquivo original ou vice-versa e exclui-se as linhas que forem iguais tipo a linha
|teste|teste|teste|teste|teste|
que contem nos dois arquivos.
tem como fazer isso?


12. Re: como usar o sed excluir linhas usando 2 arquivos [RESOLVIDO]

Fernando
phoemur

(usa Debian)

Enviado em 09/07/2013 - 22:55h

Só lembrando que estamos usando o sed com a opção -i então ele não vai mostrar a saída na tela, vai editar os arquivos direto...
Se quiser apenas mostrar na tela sem editar você não pode usar essa opção...

Mostrando na tela apenas, sem mudar o arquivo, exemplo usando o grep:


grep -v "$(tr '|' '.' < excluir.txt | paste -sd' ' | sed 's/ /\\|/g')" original.txt


Como eu disse tem variadas formas de fazer isso



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts