내부에 특정 단어가 포함 된 텍스트 파일을 찾는 방법 (이름이 아님)


117

하드 디스크에서 특정 단어가 포함 된 텍스트 파일을 찾고 싶습니다.

우분투 12.4 이전에는 응용 프로그램을 대시에서 시작했는데 그 아이콘이 돋보기 인 "파일 검색 ..."이라고 생각했는데, 더 이상 간단한 응용 프로그램을 찾을 수 없습니다.

답변:


198

grep터미널 에서 명령을 사용할 수 있습니다 .

 grep -r word *

이 명령은 현재 디렉토리 (또는 하위 디렉토리) 아래의 모든 파일에서 "word"를 모두 찾습니다.


9
별표는 숨겨진 파일과 일치하지 않습니다. 모든 파일을 검색하려면 실행할 수 있습니다 grep -r word ..
Ian Mackinnon

쉘 스크립트에서 grep을 호출하면 검색 키워드가 강조 표시되지 않지만 --color=auto플래그가이를 해결할 수 있습니다.
noobninja

67

gnome-search-tool을 설치하십시오.

sudo apt-get install gnome-search-tool

열기 Search for files를 선택 Select More Options하고


여기에 이미지 설명을 입력하십시오


1
이 기능을 사용하려면 OS를 다시 시작해야합니까? 아니면 12에서 작동하지 않습니까?
jcollum

설치 부분을 완료 했습니까? 나는 그것이 작동해야한다고 확신한다, 그것은 13.04에서 작동한다.
Hingev

which gnome-search-tool= /usr/bin/gnome-search-tool... 그러나 gnome (검색, 파일 검색 ...)에서 검색 옵션을 열면 "추가 옵션 선택"에 대한 옵션이 없습니다
jcollum

1
터미널에 입력하여 열면 gnome-search-tool다음을 볼 수 있습니다.
Hingev

"파일 검색"대시를 통해 gnome-search-tool을 실행할 수 있으므로 터미널이 필요하지 않습니다.
Bernard Decock

6

다음은 텍스트 파일에서만 작동하고 바이너리 / 응용 프로그램 파일을 무시하기 위해 특별히 추가 된 몇 가지 옵션을 사용하여 특정 텍스트 문자열의 파일을 검색하는 데 사용할 수있는 다양한 방법에 대한 개요입니다.

그러나 대부분의 줄 일치 도구는 줄의 어느 곳에서나 단어를 찾으려고하기 때문에 단어 검색이 약간 복잡해질 수 있습니다. 우리가 줄의 시작 또는 끝에서, 또는 줄에서 혼자 나타날 수 있거나 공백 및 / 또는 문장 부호로 둘러싸인 문자열로 단어에 대해 이야기하고 있다면, 정규 표현식, 특히 오는 단어가 필요할 때입니다. Perl에서. 여기에, 예를 들어, 우리가 사용할 수 -P있는 grep그것을 둘러싸는 펄 정규 표현식을 사용하도록.

$ 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

$ grep -rIH  'word'
  • -r 현재 디렉토리에서 재귀 검색
  • -I 이진 파일을 무시하려면
  • -H 일치하는 파일 이름을 출력

검색에만 적합합니다.

찾기 + grep

$ find -type f -exec grep -IH 'word' {} \;
  • find 재귀 검색 부분을 수행
  • -I 옵션은 이진 파일을 무시하는 것입니다
  • -H 줄이있는 파일 이름을 출력합니다.
  • 서브 쉘 내에서 다른 명령과 결합하기위한 좋은 접근 방식 :

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

#!/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 },".")

재귀 bash 스크립트의 가난한 사람들 재귀 grep

이것이 "bash 길"입니다. 이상적이지 않으며, 설치 grep하거나 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 "$@"

4

질문은 꽤 오래되었습니다 ... 어쨌든 ... 현재 (2016) tracker파일 내부의 텍스트를 검색하기 위해 설치할 수 있는 그놈 앱 (우분투 저장소에서 찾을 수 있음)이 있습니다 (odt-ods-odp-pdf 시도) . 패키지에는 4 개의 다른 패키지가 설치되어 제공됩니다 (트래커 추출, 트래커 GUI, 트래커 마이너 -fs, 트래커 유틸리티) Namastè :)


트래커는 좋은 소프트웨어이지만 색인을 검색 할 파일에 대한 정보가 이미 색인에 포함되어 있어야합니다. Recoll보다 적은 리소스를 사용하므로 인덱스 크기가 확실하지 않습니다. 그러나 특정 텍스트가있는 파일을 검색해야하고 gui로 파일을 찾으려면 gnome-search-tool이 색인없이 문제를 해결합니다. 이전 우분투 버전의 기본 앱이었습니다. 대체없이 왜 제거했는지 모르겠습니다.
Hatoru Hansou

2

예, GUI 응용 프로그램을 찾고 있다는 것을 알고 있으며 이것은 오래된 게시물이지만 누군가에게 도움이 될 수 있습니다. ack-grep 유틸리티를 찾았습니다. 먼저 그것을 통해 설치 sudo apt-get install ack-grep한 다음 ack-grep what_you_looking_for검색하려는 디렉토리에서 명령을 실행 하십시오. 텍스트가있는 모든 파일을 표시하고이 파일의 미리보기도 표시합니다. 그리고 이것은 나에게 매우 중요합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.