Como eu removo linhas de um arquivo que contém uma string específica?

5

Como eu removo linhas de um arquivo (hosts) que contêm uma string "adf.ly"?

    
por wb9688 16.06.2015 / 10:13

6 respostas

11

usando sed

Execute este comando:

sed -i '/adf\.ly/d' inputfile 

man sed

   -i[SUFFIX], --in-place[=SUFFIX]
      edit files in place (makes backup if extension supplied)

Usando o grep

Obrigado por notas do @kos:

grep -v "ad\.fly" inputFile  > outputfile
    
por Maythux 16.06.2015 / 10:23
3

Usando awk (graças a terdon pela versão abreviada):

< inputfile awk '!/adf\.ly/' > outputfile
  • < inputfile : redireciona o conteúdo de inputfile para awk ' stdin
  • > outputfile : redireciona o conteúdo de awk stdout para outputfile

% de colapso do comandoawk:

  • !/adf\.ly/ : imprime o registro se não corresponder à adf\.ly regex

Usando o Perl (graças ao terdon para a versão resumida):

< inputfile perl -ne '/adf\.ly/||print' > outputfile
  • -n : coloca um loop while (<>) {[...]} ao redor do script
  • -e : lê o script dos argumentos

Divisão do comando Perl:

  • / : inicia o padrão
  • adf\.ly : corresponde a uma adf\.ly string
  • / pára o padrão
  • || : executa o seguinte comando apenas se o padrão não corresponder à linha
  • print : imprime a linha
por kos 16.06.2015 / 11:32
3

O seguinte removerá as linhas que contêm "adf.ly" em filename.txt in-place:

sed -i '/adf\.ly/d' filename.txt

Use o comando acima sem -i para testá-lo antes de remover linhas.

    
por Ron 16.06.2015 / 10:23
1

Aqui está uma bash one-liner:

while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt
  • A variável i conterá cada linha enquanto iterar

  • [[ $i =~ .*adf\.ly.* ]] verifica se a linha tem a string adf.ly , ! nega a verificação, portanto [[ ! $i =~ .*adf\.ly.* ]] verificará se a linha não contém adf.ly

  • Se sim ( && ), a linha será impressa.

Para salvar a saída em outro arquivo ( out.txt ):

while IFS= read -r i; do [[ ! $i =~ .*adf\.ly.* ]] && echo "$i"; done <file.txt >out.txt
    
por heemayl 16.06.2015 / 14:27
1

Você pode usar o editor de texto padrão, ed :

printf '%s\n' 'g/adf\.ly/d' w q | ed file.txt
    
por evilsoup 16.06.2015 / 19:46
1

Você pode usar o Vim no modo Ex:

ex -sc 'g/adf\.ly/d' -cx hosts
  1. g pesquisa global

  2. d delete

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 17:39