(名前ではなく)内部に特定の単語を含むテキストファイルを見つける方法


117

特定の単語を含むテキストファイルをハードディスクで検索したい。

Ubuntu 12.4以前は、ダッシュアプ​​リケーションで起動していましたが、これは「ファイルの検索...」と呼ばれていたと思います。アイコンは虫眼鏡でした。

回答:


198

grepターミナルからコマンドを使用できます:

 grep -r word *

このコマンドは、現在のディレクトリ(またはサブディレクトリ)の下にあるすべてのファイルで「単語」のすべての出現を検索します。


9
アスタリスクは隠しファイルと一致しません。すべてのファイルを検索するには、を実行しgrep -r word .ます。
イアンマッキノン

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で動作するはずだと確信しています。
ヒンジv

which gnome-search-tool= /usr/bin/gnome-search-tool...しかし、gnomeで検索オプションを開くと(移動、ファイルの検索...)、「その他のオプションを選択」のオプションがありません
-jcollum

1
ターミナルで入力して開きます:gnome-search-toolそして、あなたはそれを見ると確信しています。
ヒンジv

ダッシュ「ファイルの検索」からgnome-search-toolを起動できるので、ターミナルは不要です。
バーナードデック

6

特定のテキスト文字列のファイルを検索するために使用できるさまざまな方法の概要を次に示します。テキストファイルのみで動作し、バイナリ/アプリケーションファイルを無視するための特別なオプションがいくつか追加されています。

ただし、ほとんどの行照合ツールは行のどこからでも単語を見つけようとするため、単語の検索は少し複雑になる可能性があることに注意してください。行頭または行末、または単独で、またはスペースや句読点で囲まれた文字列としての単語について話している場合-正規表現、特に来るものが必要な場合Perlから。ここでは、たとえば、-Pin grepを使用して、Perlの正規表現を使用してそれを囲むことができます。

$ 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 {} \;
    

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

再帰bashスクリプトでの貧乏人の再帰grep

これが「bash way」です。理想的ではない、おそらくあなたが持っているgrepperlインストールしたときにこれを使用する正当な理由はない。

#!/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ファイル内のテキストを検索するためにインストールできる(ubuntuリポジトリで見つけることができる)と呼ばれるgnomeアプリがあります(試されたodt-ods-odp-pdf) 。パッケージには、インストールする他の4つのパッケージ(tracker-extract、tracker-gui、tracker-miner-fs、tracker-utils)Namastèが付属しています。


トラッカーは優れたソフトウェアですが、インデックスには、検索でヒットしたいファイルに関する情報がすでに含まれている必要があります。Recollよりも使用するリソースが少ないため、インデックスサイズについてはわかりません。ただし、特定のテキストでファイルを検索する必要があり、GUIで検索する場合、gnome-search-toolはインデックスなしで問題を解決します。以前のUbuntuバージョンではデフォルトのアプリでしたが、交換せずに削除した理由はわかりません。
半蔵H 16

2

はい、あなたはGUIアプリケーションを探していたと知っています。これは古い投稿ですが、これは誰かを助けるかもしれません。ack-grep utilを見つけました。最初にインストールしてからsudo apt-get install ack-grepack-grep what_you_looking_for検索したいディレクトリでコマンドを実行します。これにより、テキストが含まれるすべてのファイルが表示され、このファイルのプレビューも表示されます。そして、これは私にとってとても重要です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.