Exibe arquivos que contenham uma palavra em mais de três linhas?

2

Estou tentando exibir todos os arquivos que contêm uma palavra específica em mais de três linhas.

i.e. arquivo:

Andrew is so nice, 
and Andrew want some ice,
but Andrew doesn't roll the dice.

Portanto, esse arquivo contém Andrew em mais de três linhas, portanto, ele será exibido.

Eu usei o grep -or '\' mas liste todos os arquivos que contenham "word" em pelo menos uma linha.

    
por Adrian George 22.08.2013 / 17:07

2 respostas

4

Tente

  grep -c Andrew * | awk -F: '{if ($2 >=3) print $1}'

Funciona porque grep -c imprime "file: count" para cada arquivo, e -F: diz ao awk que os dois pontos separam os campos.

    
por Thorbjørn Ravn Andersen 22.08.2013 / 18:10
2

O script de shell a seguir pode ser útil:

#!/bin/bash

if [ $# -ne 2 ];then
  echo "Usage: 'basename $0' DIRECTORY STRING"
  exit 1
fi

for file in $1/* ; do
    if [ 'cat $file 2>/dev/null | grep -c $2' -ge 3 ]; then 
        echo $file
    fi
done

O script deve ser executado com dois argumentos:

  • DIRECTORY - o diretório em que você deseja procurar arquivos que contenham uma palavra em mais de três linhas

  • STRING - a palavra para procurar.

Ou, em um único comando para arquivos do diretório atual e a palavra "Andrew":

for file in *;do if [ 'cat $file 2>/dev/null|grep -c Andrew' -ge 3 ];then echo $file;fi;done
    
por Radu Rădeanu 22.08.2013 / 17:11