Hogyan találhatsz egy szöveges fájlt, amely egy adott szót tartalmaz (nem a saját nevében)

97

Szeretnék egy szövegfájlt találni a merevlemezemen, amely egy adott szót tartalmaz.

Az Ubuntu 12.4 előtt elkezdtem egy alkalmazást a kötőjelbe, azt hiszem, "File keresése ..." volt, akinek az ikonja nagyító volt. Nem találom ezt az egyszerű alkalmazást. / p>     

készlet SomeoneMe 29.04.2012 18:40
forrás

6 válasz

162

Használhatja agrep parancsot a terminálról:

 grep -r word *

Ez a parancs az aktuális könyvtár (vagy alkönyvtárak) alatt található összes fájlban megtalálja a "szó" minden előfordulását.

    
válasz adott Steve Chapel 29.04.2012 18:48
forrás
63

Telepítse a gnome-search-eszközt.

sudo apt-get install gnome-search-tool

Nyissa meg a (z)Search for files választja a (z)Select More Options és

elemet
válasz adott hingev 29.04.2012 18:48
forrás
4

A kérdés meglehetősen öreg ... egyébként ... Jelenleg (2016) van egy gnome app nevűtracker (megtalálható ubuntu repositories), amely telepíthető szöveges fájlok keresésére (kipróbált odt-ods-odp-pdf). A csomag 4 további csomagot tartalmaz (tracker-extract, tracker-gui, tracker-miner-fs, tracker-utils) Namastè:)

    
válasz adott cico 14.01.2016 01:11
forrás
2

Igen, tudom, hogy gui alkalmazást keresel, és ez régi post, de talán ez segít valakinek. Találtam ack-grep util. Először telepítse asudo apt-get install ack-grep parancsot, majd futtassa aack-grep what_you_looking_for parancsot a könyvtárban, ahol keresni szeretné. Ez megmutatja az összes olyan fájlt, amelyen a szöveged látható, és ezen fájlok előnézete is. És ez nagyon fontos számomra.

    
válasz adott spajdo 25.02.2016 11:38
forrás
2

Íme egy áttekintés a különböző módszerekről, amelyeket bizonyos szövegekhez tartozó fájlok keresésére használhatunk, néhány lehetőséggel, amelyek kifejezetten csak szöveges fájlokkal működnek, és nem veszik figyelembe a bináris / alkalmazásfájlokat.

Figyelembe kell azonban venni, hogy a szókeresés kicsit bonyolult lehet, mivel a legtöbb line-matching eszköz megpróbálja megtalálni a szót bárhol a vonalon. Ha egy szóról beszélünk, amely a vonal elején vagy végén, vagy egyedül a vonalon, vagy szóközökkel és / vagy írásjelekkel körülvéve jelenhet meg - akkor rendszeres kifejezésekre lesz szükségünk, és különösen azokhoz, akik jönnek a Perl-től. Itt például a-P -bangrep -ot használhatjuk, ha Perl szabályos kifejezéseit használhatjuk körülötte.

$ 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

Egyszerű grep

$ grep -rIH  'word'
  • -r a rekurzív kereséshez az aktuális könyvtárból
  • -I figyelmen kívül hagyja a bináris fájlokat
  • -H a kimenő fájl nevének megadásához, ahol a találatot találja

Csak keresésre alkalmas.

találja a + grep

kifejezést
$ find -type f -exec grep -IH 'word' {} \;
  • Afind a rekurzív keresési részt
  • -I opció a bináris fájlok figyelmen kívül hagyása
  • -H a kimeneti fájl neve, ahol a sor megtalálható
  • Jó megközelítés a többi alprogramon belüli parancsok kombinálásához, például:

    $ find -type f -exec sh -c 'grep -IHq "word" "" && echo "Found in "' 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 },".")

szegény ember rekurzív grep a rekurzív bash parancsfájlban

Ez a "bash mód". Nem ideális, valószínűleg nincs jó oka annak, ha agrep vagyperl telepítve van.

#!/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 "" in
        *word*) printf "%s\n" "";;
    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 < ""
}

is_text_file(){
    # alternatively, mimetype command could be used
    # with *\ text\/* as pattern in case statement
    case "$(file -b --mime-type "")" 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 "$@"
    
válasz adott Sergiy Kolodyazhnyy 11.11.2017 19:00
forrás
0

Még egyszerűbb és gyorsabb is az "ezüst kereső"sudo apt-get install silversearcher-ag. Vessen egy pillantást a linkre , hogy megmutassa, miért jobb, mint ack * többek között.

    
válasz adott Diego Andrés Díaz Espinoza 08.02.2017 17:52
forrás