comment trouver un mot dans un fichier texte depuis un répertoire [dupliquer]

26

Supposons que je possède un répertoire avec le nom _file et que je comprenne deux sous-répertoires tels que _1 et _2 et sur chacun d’eux des fichiers texte. Je veux rechercher un mot comme foo dans l'un de ces fichiers texte. Comment je peux faire ça? Je veux savoir quels fichiers texte de tout le répertoire contiennent ce mot?

    
posée Mohammad Reza Rezwani 07.05.2014 - 14:07
la source

4 réponses

10
  1. Ouvrez un terminal.
  2. Installez ack-grep en tapant sudo apt-get install ack-grep
  3. Accédez au répertoire sous lequel vous souhaitez effectuer la recherche et tapez ack-grep foo . il liste toutes les correspondances dans tous les fichiers de ce répertoire.
réponse donnée Mahesh 07.05.2014 - 14:12
la source
55

Si vous ne souhaitez pas installer de logiciel supplémentaire, vous pouvez simplement utiliser grep dans le terminal. Pour effectuer une recherche récursive dans les répertoires, vous pouvez utiliser l'option -r (voir man grep pour plus de détails). La syntaxe que vous recherchez est probablement la suivante:

grep -r "[STRING TO SEARCH FOR]" "[DIRECTORY TO SEARCH]"

Par exemple, si je veux rechercher la chaîne "asdf" dans tous les fichiers de tous les sous-répertoires de "/ tmp / testdir /", la commande ressemble à ceci:

grep -r "asdf" "/tmp/testdir/"

Les guillemets ne sont pas strictement nécessaires, mais si votre chemin de chaîne ou de répertoire contient des espaces blancs, vous devrez sinon les masquer en utilisant le caractère \ ...

    
réponse donnée soulsource 07.05.2014 - 14:20
la source
7

Installez simplement gnome-search-tool en utilisant sudo apt-get install gnome-search-tool
Rechercher dans le tiret pour «rechercher des fichiers» et le lancer.

Voir image ci-dessous:

  1. Laissez la section "Nom contient" vide.
  2. Sélectionnez votre dossier.
  3. Déplier la partie "sélectionner plus d’options" et choisir "contient le texte" puis appuyer sur ajouter.
  4. Tapez ici le texte que vous souhaitez rechercher et cliquez sur trouver dans le coin inférieur droit.

Profitez.

    
réponse donnée Parto 07.05.2014 - 14:15
la source
7

Vous pouvez utiliser grep récursif avec l’indicateur -l pour imprimer uniquement le nom du fichier au lieu de la ligne correspondante:

grep -Rl foo .

Ou vous pouvez utiliser find :

find . -type f -exec grep -l foo {} +

Ou. vous pouvez utiliser extglob et normal grep

shopt -s extglob
grep -l foo **/*
    
réponse donnée terdon 07.05.2014 - 16:01
la source

Lire d'autres questions sur les étiquettes