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


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

Avant Ubuntu 12.4, j'avais l'habitude de lancer une application dans le tableau de bord, je pense que cela s'appelait "Rechercher un fichier ...", dont l'icône était une loupe. Je ne trouve plus cette application simple.


97
2018-04-29 16:40


origine




Réponses:


Vous pouvez utiliser le grep commande du terminal:

 grep -r word *

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


161
2018-04-29 16:48



Il a spécifiquement mentionné une méthode d'interface graphique;) - Rinzwind
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
@Rinzwind: Pas dans le titre! Je suis venu ici googler pour la manière de console pour rechercher des mots à l'intérieur des fichiers, donc cette réponse est parfaite pour moi! - Nikolay Ivanov
Le terminal a une interface graphique ... c'est juste une interface que vous tapez dans :-D - billynoah
ce n'est peut-être pas la réponse acceptée en raison de l'interface graphique, mais c'est la bonne réponse :) - inquisitive


Installez gnome-search-tool.

sudo apt-get install gnome-search-tool

Ouvrir Search for files sélectionner Select More Options et


enter image description here


63
2018-04-29 16:48



devez-vous redémarrer le système d'exploitation pour que cela fonctionne? ou peut-être que ça ne marche pas dans 12? - jcollum
avez-vous terminé la partie installation? Je suis presque sûr que ça doit marcher, ça marche sur 13.04. - hingev
which gnome-search-tool = /usr/bin/gnome-search-tool... mais lorsque 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
ouvrir en tapant terminal: gnome-search-tool et 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


La question est assez ancienne ... de toute façon ... actuellement (2016) il y a une application gnome appelée tracker (vous pouvez le trouver dans les dépôts Ubuntu) qui peut être installé pour rechercher du texte dans les 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
2018-01-14 00:11



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 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 que vous voulez le faire avec une interface graphique, 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 remplacement. - Hatoru Hansou


Oui, je sais que vous cherchiez une application d'interface graphique et que c'est un ancien message, mais peut-être que cela aide quelqu'un. J'ai trouvé ack-grep util. Au début installez-le via sudo apt-get install ack-grep puis lancez la commande ack-grep what_you_looking_for dans le répertoire où vous souhaitez rechercher. Cela vous montre tous les fichiers dans lesquels se trouve votre texte et montre également un aperçu de ces fichiers. Et c'est si important pour moi.


2
2018-02-25 10:38





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

Il convient toutefois de noter que la recherche de mots peut être un peu complexe, car la plupart des outils de correspondance de lignes essaient de trouver un mot n'importe où sur la ligne. Si nous parlons d'un mot comme une chaîne qui pourrait apparaître au début ou à la fin de la ligne, ou seul sur la ligne, ou entouré d'espaces et / ou de ponctuation - c'est à ce moment que nous aurons besoin d'expressions régulières. de Perl. Ici, par exemple, nous pouvons utiliser -P dans grep utiliser les 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 une recherche récursive depuis le répertoire courant
  • -I ignorer les fichiers binaires
  • -H à la sortie du nom de fichier où la correspondance est trouvée

Convient à la recherche uniquement.

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 subshell, comme:

    $ 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-mans en script récursif bash

C'est le "chemin bash". Pas idéal, probablement pas de bonne raison de l'utiliser quand vous avez grep ou perl installée.

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

2
2017-11-11 18:00





Encore plus simple et rapide est "chercheur d'argent" sudo apt-get install silversearcher-ag. Jeter un coup d'œil à https://github.com/ggreer/the_silver_searcher pour des raisons pour lesquelles il vaut mieux qu'ack * entre autres.


0
2018-02-08 16:52