Linuxでファイル内の特定の単語を見つける方法

デフォルトでは、ほとんどの検索ツールはファイル名ではなくファイルの内容を見ます。しかし、最も有名なGNU検索プログラムであるgrepは、正しいフラグを使用すればファイルの中を調べます。ここでは、Linuxでファイル内の特定の単語を見つける方法を説明します。
目次
- grepを使ってファイル内の特定の単語を見つける
- findを使ってファイル内の特定の単語を見つける
- ackを使ってファイル内の特定の単語を見つける
- GUIが欲しいですか?Catfishを使いましょう
- よくある質問
こちらもお読みください: Linuxで大きなファイルを見つける方法
grepを使ってファイル内の特定の単語を見つける
デフォルトでは、grepはファイル名と同様にファイルの内容を検索します。ほとんどのLinuxシステムには含まれており、ディストリビューション間で一般的に同じです。プロジェクトのファイル内容を探しているプログラマーは、ackのような異なるコマンドを実行することを好むことがあります。
ファイルのエンコード方式によっては、grepが中を見れない場合もあります。しかし、ほとんどのテキストベースのフォーマットでは、grepは指定されたパターンに対してファイルのテキストをスキャンできます。
grep -r -w '/path/to/search/' -e 'pattern'-rフラグはgrepを再帰モードに設定し、指定されたディレクトリ内のすべてのディレクトリをナビゲートします。-wフラグは完全な単語の一致を検索します。これは、「red」が実際の単語「red」とのみ一致し、red undantやti red のようにそれを含む文字列とは一致しないことを意味します。これは、文字、数字、またはアンダースコアではない非単語構成文字で囲まれた「red」のみを探すことによって行われます。-eフラグは検索するパターンの前に付けます。デフォルトで正規表現をサポートします。
grepの速度を上げるには、--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のパターンに一致するディレクトリを検索しません。指定された再帰的な完全単語一致の検索を現在の作業ディレクトリ内の他のすべてのファイルに対して実行します。
grepと一緒に使用できる興味深いフラグ
grepの使い方を適切に理解したところで、コマンドに付け加えることができるいくつかの便利なフラグを紹介します:
-i– grepを大文字小文字を区別しない検索を行うようにします。例えば、「Kraken」を検索すると、grepが「kraken」や「kRaken」と一致する場合に結果が返されます。-n– 一致する行の番号を表示します。これは特にプログラマーや大きな設定ファイルを調査している人にとって便利です。-R–-rと同様に、grepはすべてのサブフォルダーを再帰的に検索しますが、この特定のフラグはシンボリックリンク(ショートカット)も追跡します。-s** – エラーメッセージを抑制します。存在しないファイル、読み込みできないファイル、または不適切な権限を持つファイルに関する多くの気が散るエラーが発生している場合は、これを渡すことでgrepが見つけた一致だけを表示するようにできます。
こちらもお読みください: linuxでfindコマンドを使ってファイルを見つける方法
findを使ってファイル内の特定の単語を見つける
findコマンドの構文はgrepよりも複雑ですが、好む人もいます。
find . -name "*.php" -exec grep "pattern" {} ;このコマンドは、findの-execフラグを使用して見つかったファイルをgrepに渡して検索させます。巧妙に構文を配置することで、findのファイルシステム検索を使用して、検索したい特定のファイルタイプを特定した後、それらをgrepにパイプしてファイル内を検索できます。
ただし、findはファイル名のみを調べ、内容には目を向けません。だからこそ、ファイルのテキストと内容を検索するにはgrepが必要です。通常のgrepフラグは、-execフラグ内から完全に動作します。
ackを使ってファイル内の特定の単語を見つける
ackコマンドは、最も速い検索ツールの1つですが、grepほど人気ではありません。以下のコマンドは現在のディレクトリ内を検索します。
ack 'pattern'特定のファイルやディレクトリ内を検索したい場合は、そのファイルまたは完全修飾パス名を検索に追加できます。
ack 'pattern' /path/to/file.txtこちらもお読みください: LinuxでPythonのバージョンをインストールし管理する方法
GUIが欲しいですか?Catfishを使いましょう
ターミナルにアレルギーがある場合、すべての人気のあるLinuxディストリビューションは、特定の文字列をファイルとその内容で検索できる多目的GUIアプリケーションであるCatfishを提供しています。ここで説明したコマンドほど高度ではありませんが、グラフィカルインターフェースを好む人々に貴重なサービスを提供します。

特定の単語のファイル内容を検索するには、Catfishの右上隅にあるメニューをクリックし、「ファイル内容を検索」をクリックします。
設定が完了したら、上部バーに検索したい内容を入力し、Enterキーを押します。それだけです!
こちらもお読みください: Su、Sudo Su、Sudo -s、Sudo -iの違い
よくある質問
grep検索を完了する前に停止するにはどうすればよいですか?
ターミナルで進行中のプロセスを停止するには、キーボードでCtrl + Cを押すだけです。これにより、実行中のプロセスを終了する信号が送れます。これが、ターミナルエミュレーター内で通常のコピー/ペーストショートカットが使用できない理由でもあります。
ファイル内容を検索するファイルマネージャはありますか?
KDE Plasmaデスクトップ環境を使用している場合、デフォルトのファイルマネージャ(Dolphin)にはすでにこの機能があります。ファイルを検索するための検索ボタンをクリックすると、検索バーの下にファイル名とファイル内容を選択するオプションがあります。
ファイル内の単語を検索したい場合は、「内容」をクリックします。grepを使用するほど高度ではありませんが、作業は行います。
grepの他に使い道はありますか?
grepはファイルシステムを検索するためだけのものではありません!興味深いことに、コマンドの出力を通じてパイプして、その出力を調べることができます。手動で何かを見つける必要がなくなります。
Grepは、コマンド出力をフィルタリングして、あなたにとってより関連性の高いものを表示します。これを使い倒すことで、最終的にはコンピュータを診断し理解する技術を習得することができるでしょう!
すべてのスクリーンショットはMiguel Leiva-Gomezによって撮影されました。