特定のWordを含むテキストファイルをハードディスクで検索したい。
Ubuntu 12.4以前は、ダッシュアプリケーションで起動していましたが、それは「ファイルの検索...」と呼ばれていました。そのアイコンは虫眼鏡でした。その単純なアプリケーションはもう見つかりません。
ターミナルからgrep
コマンドを使用できます。
grep -r Word *
このコマンドは、現在のディレクトリ(またはサブディレクトリ)の下にあるすべてのファイルで「Word」のすべての出現箇所を検索します。
Gnome-search-toolをインストールします。
Sudo apt-get install gnome-search-tool
Search for files
を選択してSelect More Options
を選択し、
特定のテキスト文字列のファイルを検索するために使用できるさまざまな方法の概要を次に示します。テキストファイルのみで動作し、バイナリ/アプリケーションファイルを無視するための特別なオプションがいくつか追加されています。
ただし、ほとんどの行マッチングツールは行のどこでもWordを見つけようとするため、Wordの検索は少し複雑になる可能性があることに注意してください。行の先頭または末尾に表示される、または行に単独で表示される、またはスペースや句読点に囲まれた文字列としてのWordについて話している場合-正規表現、特に来るものが必要な場合Perlから。ここで、たとえば、grep
で-P
を使用して、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 -rIH 'Word'
-r
現在のディレクトリからの再帰的検索-I
はバイナリファイルを無視します-H
は、一致するファイル名を出力します検索のみに適しています。
$ 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 way」です。 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
(ubuntuリポジトリで見つけることができる)と呼ばれるgnomeアプリがあります(odt-odsを試しました) -odp-pdf)。このパッケージには、インストールする他の4つのパッケージ(tracker-extract、tracker-gui、tracker-miner-fs、tracker-utils)が含まれています。
はい、あなたはGUIアプリケーションを探していたことがわかります。これは古い投稿ですが、これは誰かを助けるかもしれません。 ack-grep utilを見つけました。最初に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 *よりも優れている理由についての理由があります。