web-dev-qa-db-fra.com

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

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

Avant Ubuntu 12.4, je lancais 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.

111
SomeoneMe

Vous pouvez utiliser la commande grep depuis le terminal:

 grep -r Word *

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

186
Steve Chapel

Installez gnome-search-tool.

Sudo apt-get install gnome-search-tool

Ouvrez Search for files sélectionnez Select More Options et


enter image description here
66
hingev

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 de Word peut être 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 en particulier de celles qui viennent de Perl. Ici, par exemple, nous pouvons utiliser -P dans grep pour 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 depuis le répertoire actuel
  • -I pour ignorer les fichiers binaires
  • -H to output filename où match est trouvé

Convient pour la recherche seulement.

trouver + grep

$ find -type f -exec grep -IH 'Word' {} \;
  • find effectue la recherche récursive
  • -I option est d'ignorer les fichiers binaires
  • -H au nom du fichier de sortie 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 pauvre-homme 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 installé grep ou Perl.

#!/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 "$@"
5

La question est assez ancienne ... de toute façon ... actuellement (2016), il existe une application gnome appelée tracker (que 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 livré avec 4 autres paquets à installer (tracker-extract, tracker-gui, tracker-miner-fs, tracker-utils) Namastè :)

4
cico

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. Installez-le d'abord via Sudo apt-get install ack-grep, puis exécutez la commande ack-grep what_you_looking_for dans 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.

2
spajdo

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 obtenir des explications sur la raison pour laquelle il vaut mieux que ack *, entre autres.