Linuxでファイル内の特定の単語を検索する方法(grep・find・ack徹底解説)
多くの検索ツールはデフォルトではファイル名のみを対象とし、ファイルの中身までは確認してくれません。しかし、GNUの代表的な検索プログラムである「grep」は、適切なオプションを指定することでファイル内部まで検索できます。この記事では、Linux上でファイル内の特定の単語を見つけるための実践的な方法を詳しく解説します。
grepを使ってファイル内の特定の単語を検索する
grepはデフォルトで、ファイルの中身とファイル名の両方を検索対象とします。大多数のLinuxシステムに標準搭載されており、ディストリビューション間でも動作はほぼ共通しています。ただし、スペックの低いマシンでは「ack」など別のコマンドの方が快適に動作する場合もあります。
ファイルのエンコード方式によってはgrepが中身を読み取れないこともありますが、テキストベースの形式であれば、指定したパターンをファイル内からスキャンして見つけ出すことが可能です。
grep -Rw '/path/to/search/' -e 'pattern'
-Rオプションは再帰モードを有効にし、指定したディレクトリ配下のすべてのサブディレクトリを辿って検索を実行します。-wオプションは単語全体での一致(完全一致)を検索します。つまり「red」は前後が空白文字に囲まれた「red」にのみ一致し、「redundant」や「tired」には一致しません。-eオプションは検索対象のパターンを指定するもので、デフォルトで正規表現をサポートしています。
検索を高速化したい場合は、--excludeや--includeオプションを使って対象ファイルの種類を絞り込むのが効果的です。たとえば--exclude=*.csvを指定すると、拡張子が.csvのファイルは検索対象から除外されます。逆に--include=*.txtを指定すると、拡張子が.txtのファイルのみが検索されます。これらのオプションは、以下のようにgrepコマンドの直後に追加できます。
grep --exclude=*.csv -Rw '/path/to/search' -e 'pattern'
特定のディレクトリを除外したい場合は、次の形式を使用します。
grep --exclude-dir={dir1,dir2,*_old} -Rw '/path/to/search' -e 'pattern'
このコマンドは、カレントワーキングディレクトリ内にあるdir1、dir2、および*_oldパターンに一致するディレクトリを検索対象から除外し、それ以外のすべてのファイルに対して、再帰的かつ単語単位の一致検索を実行します。
findを使ってファイル内の特定の単語を検索する
findコマンドはgrepよりも構文が複雑ですが、あえてこちらを選ぶユーザーもいます。
find . -name "*.php" -exec grep "pattern" {} \;
このコマンドは、findの-execオプションを利用して、見つかったファイルをgrepに引き渡して検索します。構文を工夫することで、findの高速なファイルシステム検索によってまず目的のファイルタイプを絞り込み、その結果をgrepに渡してファイルの中身を調べるという流れが実現できます。
なお、find自体はファイル名しか参照しないため、ファイルのテキスト内容を検索するにはgrepが必須です。-execオプション内では、通常のgrepオプションがそのまま使用可能です。
ackを使ってファイル内の特定の単語を検索する
ackコマンドはおそらく最速クラスの検索ツールですが、前述の2つほど普及してはいません。以下のコマンドは、カレントディレクトリ内を検索します。
ack 'pattern'
特定のファイルやディレクトリを検索したい場合は、検索パターンの後にファイル名または絶対パスを追加してください。
ack 'pattern' /path/to/file.txt
まとめ
ほとんどのユーザーにとって、幅広い環境で利用できるgrepが最良の選択肢となるでしょう。さらに高速な検索が必要な場合は、RipGrep(rg)などの他の検索ツールも検討してみるとよいでしょう。
-
Windows 10で見つからないファイルを探す方法|検索機能を最大限に活用するコツ
見当たらないファイルやプログラムをお探しですか?実は、Windowsに標準搭載されている検索機能を使えば、失くしたと思っていたデータが意外と簡単に見つかることがあります。 基本の検索方法:Win+Sショートカット Windowsの検索機能はOS本体やインターフェースに深く組み込まれており、いつでもすぐに呼び出せます。新しい検索を開始するには、キーボードのWin + Sを押すだけです。 検索ボックスが開いたら、探しているファイルの中身に含まれていると考えられる単語や文字列を入力してみましょう。運が良ければ、目的の項目が即座に表示されます。 カテゴリで検索結果を絞り込む 検索画面の上部にはカテゴ
-
Linuxでファイルを完全に削除する方法|復元不能にする5つのテクニック
Linuxオペレーティングシステムでは、削除したファイルはまずゴミ箱へ移動します。ゴミ箱を空にすると、ファイルはシステムから削除されたように見えます。しかし、データ復元ソフトの需要が高まる昨今、ゴミ箱から削除したファイルでも、ある程度まで復元できてしまうのが実情です。つまり、ゴミ箱から取り除かれたファイルは完全に消去されたわけではなく、単に見えなくなっただけなのです。ファイルはハードディスクのどこかに残り続け、不要な領域を占有します。新しいファイルが作成され、同じセクターに上書き保存されて初めて、物理的には完全に消去されることになります。貴重なディスク容量を回収し、ファイル破損を防ぐためにも、