remove texto do arquivo

1

Eu quero remover algum texto de file1.txt .

Eu coloco o texto no arquivo tmp e faço:

grep -f tmp file.txt

Mas isso me dá apenas a diferença.

A questão é como remover a diferença de file.txt .

    
por Ellouze Anis 10.06.2013 / 12:50

4 respostas

7

Fazer grep -f tmp file.txt exibirá todas as linhas contendo o trabalho text (suponha que tmp apenas contenha o trabalho text ). Se quiser exibir todas as linhas que não contêm o texto da palavra, você precisa usar a opção -v para inverter a correspondência:

$ grep -v 'text' file.txt

Se você imprimir todas as linhas no arquivo, mas apenas remover todas as ocorrências de text , então:

$ sed 's/text//g' 
    
por 10.06.2013 / 12:53
4

Se você quiser remover linhas do seu file.txt , que contém a linha em que text é a semente, você pode fazer algo como:

sed '/text/d' file.txt

ou

sed -n '/text/!p' file.txt
    
por 10.06.2013 / 13:59
2

O que você quer fazer é

grep -Fvf tmp file.txt

De man grep :

   -f FILE, --file=FILE
          Obtain patterns from FILE, one per line.   The
          empty   file   contains   zero  patterns,  and
          therefore matches nothing.  (-f  is  specified
          by POSIX.)
   -F, --fixed-strings
          Interpret PATTERN as a list of fixed  strings,
          separated  by  newlines, any of which is to be
          matched.  (-F is specified by POSIX.)
   -v, --invert-match
          Invert  the  sense of matching, to select non-
          matching lines.  (-v is specified by POSIX.)

Portanto, -f informa grep para ler a lista de padrões que ele irá procurar em um arquivo. -F é necessário, portanto grep não interpreta esses padrões como expressões regulares. Assim, dada uma string como foo.bar , o . será considerado como literal . e não como "corresponde a qualquer caractere". Finalmente, o -v inverte a correspondência, então grep imprimirá apenas as linhas que não corresponderem a nenhum dos padrões em tmp . Por exemplo:

$ cat pats 
aa
bb
cc
$ cat file.txt 
This line has aa
This one contains bb
This one contains none of the patterns
This one contains cc
$ grep -Fvf pats file.txt 
This one contains none of the patterns
    
por 10.06.2013 / 22:27
0

O que eu faço é:

sed '/text_to_delete/d' filename | sponge filename

Isso fará a alteração no arquivo de origem.

    
por 27.11.2016 / 19:58

Tags