Comment trouver un fichier texte contenant un mot spécifique à l'intérieur (pas dans son nom)

117

Je veux trouver un fichier texte sur mon disque dur qui contient un mot spécifique.

Avant Ubuntu 12.4, je lançais au tableau de bord une application, je crois que cela s’appelait "Rechercher un fichier ...", dont l’icône était une loupe. Je ne trouve plus cette application simple.

Quelqu'unMe
la source

Réponses:

198

Vous pouvez utiliser la grepcommande du terminal:

 grep -r word *

Cette commande trouvera toutes les occurrences de "mot" dans tous les fichiers du répertoire courant (ou des sous-répertoires).

Steve Chapel
la source
9
L'astérisque ne correspond pas aux fichiers cachés. Pour rechercher tous les fichiers que vous pouvez exécuter grep -r word ..
Ian Mackinnon
Si grep est appelé à partir d'un script shell, le mot-clé de recherche ne peut pas être imprimé en surbrillance, mais l' --color=autoindicateur peut résoudre ce problème.
noobninja
67

Installez gnome-search-tool.

sudo apt-get install gnome-search-tool

Ouvrir Search for filessélectionner Select More Optionset


entrez la description de l'image ici

Hingev
la source
1
Devez-vous redémarrer le système d'exploitation pour que cela fonctionne? ou peut-être que cela ne fonctionne pas dans 12?
jeudi
as-tu fait installer une partie? Je suis à peu près sûr que ça doit marcher, ça marche le 13.04.
Hingev
which gnome-search-tool= /usr/bin/gnome-search-tool... mais quand j'ouvre l'option de recherche dans gnome (Aller, Rechercher des fichiers ...) il n'y a pas d'option pour "Sélectionner plus d'options"
jcollum
1
ouvrez en tapant terminal: gnome-search-toolet je suis sûr que vous le verrez.
Hingev
Vous pouvez lancer gnome-search-tool via le tiret "Rechercher des fichiers", vous n’avez donc pas besoin du terminal.
Bernard Decock
6

Voici un aperçu des différentes méthodes que vous pouvez utiliser pour rechercher dans des fichiers des chaînes de texte spécifiques, avec quelques options ajoutées spécifiquement pour travailler uniquement avec les fichiers texte et ignorer les fichiers binaires / d'application.

Il convient toutefois de noter que la recherche d'un mot peut devenir un peu complexe, car la plupart des outils de correspondance de lignes tenteront de trouver un mot n'importe où sur la ligne. Si nous parlons d'un mot en tant que chaîne pouvant apparaître au début ou à la fin de la ligne, ou seul sur la ligne, ou entouré d'espaces et / ou de ponctuation, nous aurons alors besoin d'expressions régulières, et surtout de celles qui viennent de Perl. Ici, par exemple, nous pouvons utiliser -Pin greppour utiliser des expressions régulières Perl pour l’entourer.

$ printf "A-well-a don't you know about the bird?\nWell, everybody knows that the bird is a word" | grep -noP '\bbird\b'                                               
1:bird
2:bird

Grep simple

$ grep -rIH  'word'
  • -r pour la recherche récursive du répertoire courant
  • -I ignorer les fichiers binaires
  • -H pour sortir le nom du fichier où la correspondance est trouvée

Convient uniquement à la recherche.

trouver + grep

$ find -type f -exec grep -IH 'word' {} \;
  • find fait la recherche récursive
  • -I l'option est d'ignorer les fichiers binaires
  • -H pour sortir le nom du fichier où la ligne est trouvée
  • bonne approche pour combiner avec d’autres commandes dans le sous-shell, comme par exemple:

    $ find -type f -exec sh -c 'grep -IHq "word" "$1" && echo "Found in $1"' sh {} \;
    

Perl

#!/usr/bin/env perl
use File::Find;
use strict;
use warnings;

sub find_word{
    return unless -f;
    if (open(my $fh, $File::Find::name)){
        while(my $line = <$fh>){
            if ($line =~ /\bword\b/){
                printf "%s\n", $File::Find::name;
                close($fh);
                return;
            }
        }
    }
}

# this assumes we're going down from current working directory
find({ wanted => \&find_word, no_chdir => 1 },".")

grep récursif des pauvres hommes dans le script bash récursif

C'est la "voie bash". Pas idéal, probablement pas une bonne raison de l'utiliser lorsque vous avez grepou perlinstallé.

#!/usr/bin/env bash
shopt -s globstar
#set -x
grep_line(){
    # note that this is simple pattern matching 
    # If we wanted to search for whole words, we could use
    # word|word\ |\ word|\ word\ )
    # although when we consider punctuation characters as well - it gets more
    # complex
    case "$1" in
        *word*) printf "%s\n" "$2";;
    esac
}
readlines(){
    #  line count variable can be used to output on which line match occured

    #line_count=1
    while IFS= read -r line;
    do
        grep_line "$line" "$filename"
        #line_count=$(($line_count+1))
    done < "$1"
}

is_text_file(){
    # alternatively, mimetype command could be used
    # with *\ text\/* as pattern in case statement
    case "$(file -b --mime-type "$1")" in
        text\/*) return 0;;
        *) return 1;;
    esac
}

main(){
    for filename in ./**/*
    do
        if [ -f "$filename" ] && is_text_file "$filename"
        then
            readlines "$filename"
        fi
    done
}
main "$@"
Sergiy Kolodyazhnyy
la source
4

La question est assez ancienne ... de toute façon ... actuellement (2016), il existe une application gnome appelée tracker(vous pouvez la trouver dans les référentiels Ubuntu) qui peut être installée pour rechercher du texte dans des fichiers (essayé odt-ods-odp-pdf) . Le paquet est fourni avec 4 autres paquets à installer (tracker-extract, tracker-gui, tracker-miner-fs, tracker-utils) Namastè :)

cico
la source
Tracker est un bon logiciel, mais il nécessite que l’index contienne déjà des informations sur le fichier qui vous intéresse pour pouvoir le chercher en effectuant une recherche. Il utilise moins de ressources que Recoll, je ne suis pas sûr de la taille de l'index. Mais si vous avez besoin de rechercher un fichier avec un texte spécifique et voulez le faire avec un gui, gnome-search-tool résout le problème sans index. C'était une application par défaut dans les versions précédentes d'Ubuntu, je ne sais pas pourquoi ils l'ont supprimée sans la remplacer.
Hatoru Hansou
2

Oui, je sais que vous cherchiez une application gui et que ceci est un ancien post, mais peut-être que cela aidera quelqu'un. J'ai trouvé ack-grep util. Au début, installez-le via sudo apt-get install ack-greppuis exécutez la commande ack-grep what_you_looking_fordans le répertoire où vous souhaitez effectuer la recherche. Cela vous montre tous les fichiers dans lesquels se trouve votre texte et affiche également un aperçu de ces fichiers. Et c'est tellement important pour moi.

Spajdo
la source
0

Encore plus simple et rapide est "chercheur d'argent" sudo apt-get install silversearcher-ag. Jetez un coup d'œil à https://github.com/ggreer/the_silver_searcher pour savoir pourquoi c'est meilleur que ack *, entre autres.

Diego Andrés Díaz Espinoza
la source