SED

1. SED

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 23/10/2015 - 16:46h

Amigos;

Tenho este comando:

for linea in `cat dicionario/c/c.txt; do egrep -n -i -w 'SUBJECT.* '$linea' .*' temporario/filtrado-a.txt; done

Ele me retorna os parâmetros desejados através de um arquivo de LOG, juntamente com o numero da linha correspondente. Gostaria de excluir as linhas que retornou, através do numero da linha gerado pelo grep -n. Sei que com o SED é possível, mas queria que assim que retornasse a pesquisa já excluir imediatamente e não ter que salvar o numero das linhas em um outro arquivo e com este novo arquivo mandar excluir as linhas em questão.

É possível? Já tentei e só consegui salvando em outro arquivo.

Grato.



  


2. Re: SED

thinomar
thinomar

(usa Linux Mint)

Enviado em 23/10/2015 - 17:18h

zwe escreveu:
Sei que com o SED é possível, mas queria que assim que retornasse a pesquisa já excluir imediatamente e ter não salvar o numero das linhas em um outro arquivo e com este novo arquivo mandar excluir as linhas em questão.


Ahn?

Não entendi muito bem, mas para realizar substituições e gravar as alterações no arquivo de origem, usa-se o argumento -i:
sed -i 's/termoProcurado/termoSubstituto/g' 

Se quiser usar regex, adicione também o argumento -e
sed -i -e 's/regexTermoProcurado/termoSubstituto/g' 

--
-I've been talking to the main computer
-And...?
-It hates me


3. Re: SED

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 23/10/2015 - 17:23h


Opa;

Assim; o comando que eu citei (for ....), eu recebo o numero de todas as linhas que eu pesquisei via GREP.

Eu queria remover as linhas que eu recebi via sed ex: sed -e '123d;456d'. Só que eu não queria salvar o resultado em um arquivo com o numero das linhas e depois executar o sed. Queria que assim que terminar o comando "for...", já pudesse executar o sed em seguida. Estou travado apenas nisso. rss

Grato.


4. Re: SED

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 24/10/2015 - 14:43h

Olá,

Faltou fechar a expressão/subshell/comando do cat. Tente assim:


for linea in `cat dicionario/c/c.txt` ; do egrep -n -i -w 'SUBJECT.* '$linea' .*' temporario/filtrado-a.txt; done


abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


5. Re: SED

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 24/10/2015 - 15:09h


Olá Parceiro.

O Problema na verdade não está nesta expressão, é com relação ao SED mesmo. Essa expressão retorna o que eu quero com o numero das linhas (grep -n). Só queria que após retornar os numeros das linhas, eu pudesse remover as mesmas com o SED em seguida. Ex: sed -e 'linhas1d;linhas2d;linhas3d'

Como comentei anteriormente, se eu salvar o numero das linhas em outro arquivo e depois remover com o sed eu consigo, porem não queria me dar ao trabalho de gerar outro codigo para gravar só as linhas,, queria que após o (for), "concatenasse" já com o SED removendo-as.

Abraços.


6. Re: SED

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 26/10/2015 - 14:08h

Saquei!
Então porque vc não roda o sed direto?
Por exemplo:
for linea in $(cat dicionario/c/c.txt) ; do sed -i '/SUBJECT.*'$linea'.*/d' temporario/filtrado-a.txt; done



abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


7. Re: SED

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 26/10/2015 - 15:10h


Opa;

Já tinha tentado com SED direto como indicou. Só que se eu mandar salvar o resultado em outro arquivo, ele gera um arquivo monstruoso. Motivo?

Tenho uma lista de 1000 linhas a remover. Com o "FOR", ele localiza a primeira linha , remove da lista e salva. Depois ele vai pra segunda linha, encontra , remove e salva. O FOR vai salvando o mesmo arquivo varias vezes, gerando um arquivo monstruoso, em minutos o arquivo está com mais de 4 Gb.

Precisava rodar o GREP -N para pegar as linhas a remover e em um segundo comando. Remover tudo e depois salvar.

Tentei pegar o numero de linhas e colocar em um aquivo único e com while mandar remover. Só que ele gera um erro : (Lista de comando muito longa).

Ta complicado, mais vou conseguir rs !

Abs.


8. Re: SED

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 26/10/2015 - 16:15h

Opa !

Estranho, o sed (com a opção -i) altera o srquivo original, ou seja, ele vai ler seu arquivo e excluir as linhas que "casam" com a expressão e gravar.


To sem meu note agora, mas assim que cheagr no escritório, vou testar algumas possibilidades pra fazer da forma que vc quer.

abs

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---


9. Re: SED

Marcelo Matos
zwe

(usa Ubuntu)

Enviado em 26/10/2015 - 18:17h


Opa;

Acho que deu certo com SED da forma que tu falou... To testando aqui, se der certo eu já finalizo este tópico.

Grande abraço.


10. Re: SED

Wellingthon Dias Queiroz - @tonyhts
tonyhts

(usa Arch Linux)

Enviado em 26/10/2015 - 18:47h

Showw!

abs
---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts