내부에 특정 단어가 포함 된 텍스트 파일을 찾는 방법 (이름이 아님) 파일을 찾고 싶습니다. 우분투 12.4

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

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



답변

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

 grep -r word *

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


답변

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

sudo apt-get install gnome-search-tool

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



답변

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

그러나 대부분의 줄 일치 도구는 줄의 어느 곳에서나 단어를 찾으려고하기 때문에 단어 검색이 약간 복잡해질 수 있습니다. 우리가 줄의 시작 또는 끝에서, 또는 줄에서 혼자 나타날 수 있거나 공백 및 / 또는 문장 부호로 둘러싸인 문자열로 단어에 대해 이야기하고 있다면, 정규 표현식, 특히 오는 단어가 필요할 때입니다. 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 "$@"

답변

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


답변

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


답변

더 간단하고 빠른 것은 “실버 검색기” sudo apt-get install silversearcher-ag입니다. https://github.com/ggreer/the_silver_searcher 에서 왜 다른 것보다 ack *보다 나은지에 대한 이유를 살펴보십시오 .