Como pesquisar o conteúdo do arquivo em um diretório para um determinado padrão e, em seguida, retornar (redirecionar) o nome do arquivo para outro arquivo?

5

Eu quero executar a seguinte tarefa usando um comando bash:

encontre todos os arquivos em /etc que contenham a string "10.17.1" ou "130.236.189" e imprima os nomes dos arquivos em outro arquivo.

Estou tentando fazer isso usando egrep .

    
por NSH 15.04.2017 / 17:49

1 resposta

5

Você poderia usar

sudo egrep -rl '(10\.17\.1|130\.236\.189)' /etc > newfile

Notas

  • Você precisa de sudo para ver alguns arquivos aqui.
  • -l imprime somente nomes de arquivos, não as linhas correspondentes
  • % recursiva de-r. Remover se você quiser apenas verificar arquivos no nível superior
  • \. corresponde literal . ; sem escapar, . corresponde a qualquer caractere.
  • a|b correspondência a ou b . Os parênteses são supérfluos neste exemplo porque não há mais nada na regex. 'foo|bar' corresponde foo ou bar tão bem quanto '(foo|bar)' . Mas eu os incluí porque acho que é uma boa prática: os parênteses definem a área para iniciar / parar alternando, por exemplo, 'foo bar|baz' corresponde a foo bar ou baz , enquanto 'foo (bar|baz)' corresponde a foo bar ou foo baz . / li>
por Zanna 15.04.2017 / 17:52