ウェブサイト検索

fgrep コマンドを使用してファイル内のテキスト文字列を検索する方法


概要: この初心者向けガイドでは、fgrep コマンドのいくつかの実用的な例について説明します。このガイドを終えると、 ユーザーはコマンド ライン インターフェイスを使用してテキスト検索操作を効率的に実行できるようになります

テキスト検索は、最も一般的に実行される操作の 1 つです。ただし、ユーザーが適切なツールに慣れていないと、この単純なタスクはすぐに時間がかかります。 Linux には、awk、sed、cut など、さまざまなテキスト フィルタリング ユーティリティがあります。

ただし、Linux では、fgrep が単純なテキスト検索に最も適したユーティリティです。このガイドでは、日常生活で使用できるfgrep コマンドの実践例をいくつか説明します。

Linux のfgrep コマンドは、grep コマンドのファミリーに分類されます。ただし、正規表現の代わりに固定文字列パターンを検索するために使用されます。したがって、 コマンドの名前はfgrep (固定 GREP) です。

fgrep コマンドの構文は、他の grep ファミリー コマンドと似ています。

fgrep [OPTIONS] PATTERNS [FILES]

まず、例として次の内容を含むプレーン テキスト ファイルを作成しましょう。

cat input.txt

ここでは、サンプルの内容を含むテキスト ファイルが準備できていることがわかります。次に、fgrep コマンドの一般的な例をいくつかの例で説明します。

1. fgrep は grep および egrep コマンドとどう違うのですか?

名前が示すように、fgrep コマンドは固定文字列パターンを検索するために使用されます。パターンを正規表現ではなく固定文字列として解釈します。したがって、時間効率の高い方法で検索操作を実行します。

違いを理解するために、grep コマンドでドット (.) 文字を使用してみましょう。

この単純な正規表現は、行末を除く任意の 1 文字と一致します。

grep ha. input.txt

上記の出力では、ドット (.) 文字がテキスト harhat、および has

次に、同じパターンを fgrep コマンドで使用して、結果を観察してみましょう。

fgrep ha. input.txt

上記の出力では、コマンドが指定されたパターンの検索に失敗していることがわかります。

これは、fgrep コマンドが正規表現を認識せず、存在しないパターン "ha." を検索しようとするために発生します。 ”

2. ファイル内のパターンを検索する方法

input.txt ファイル内で文字列 professional を検索する基本的な例から始めましょう。

fgrep professionals input.txt

ご覧のとおり、パターン マッチングは 2 か所で成功し、赤色で強調表示されています。

3. 一致したパターンの Grep 出力色を設定する方法

前の例では、デフォルトで、一致したパターンが赤色で強調表示されることがわかりました。ただし、GREP_COLOR 環境変数に別の値を割り当てることで、この動作を変更できます。

32GREP_COLOR 環境変数に割り当てて、一致したパターンを緑色で強調表示しましょう。

export GREP_COLOR=32
fgrep professionals input.txt

次の例に進む前に、GREP_COLOR 環境変数の設定を解除して、デフォルトの動作を有効にします。

unset GREP_COLOR

4. ファイル内の複数のパターンを検索する方法

場合によっては、複数の文字列に対してパターン マッチングを実行する必要があります。このような場合、コマンド ライン引数の代わりにテキスト ファイルからパターンを提供できます。

複数のパターンを別の行に含むテキスト ファイルを作成してみましょう。

cat pattern.txt

professionals
website

次に、このファイルを -f オプションとともに使用して、複数のパターン マッチングを実行してみましょう。

fgrep -f pattern.txt input.txt

上記の出力では、文字列 professionalswebsite のパターン マッチングが成功していることがわかります。

5. ファイル内の一致数を制限する方法

デフォルトでは、fgrep コマンドはファイル全体が処理されるまでパターン マッチングを実行し続けます。

ただし、場合によっては、一致数を制限する必要があります。このような場合、次のコマンドで -m オプションを使用できます。

fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

この例では、fgrep コマンドは最初のパターンと一致した後にファイル処理を停止します。

6. パターン検索時にファイル名を印刷する方法

場合によっては、特定のパターンが存在するファイルの名前を見つけるだけで十分な場合があります。このような場合は、fgrep コマンドの -l オプションを使用できます。

fgrep -l professionals input.txt

input.txt

ここで、コマンドは一致したパターンを持つ行ではなく、ファイル名のみを出力することがわかります。

7. パターンマッチング失敗時のファイル名印刷方法

前の例では、パターン マッチングが成功したときにファイル名を出力する方法を説明しました。では、逆の操作を行う方法を見てみましょう。

ファイル内に存在しないパターンを見つけて、結果を観察してみましょう。

fgrep -L non-existing-word input.txt

input.txt

この例では、パターン マッチングが成功しなかった場合にファイル名を出力するコマンドの -L オプションを使用しました。

8. エラーメッセージを抑制する方法

エラー処理は、シェル スクリプトを作成する際に重要な役割を果たします。ただし、重要ではない一部のシナリオでは、エラー メッセージを無視しても問題ありません。

fgrep では、存在しないファイルまたは読み取り不可能なファイルに関連するエラーを抑制する -s オプションを使用できます。この動作をよりよく理解するために、存在しないファイルでパターンを検索してみましょう。

fgrep -s professionals non-existing-file.txt
echo $?

2

上記の出力では、コマンドが標準エラー ストリームにエラーを表示しないことがわかります。ただし、失敗はゼロ以外の戻り値によって報告されます。

これに加えて、ファイルが読み取れない場合にも同じ動作が観察されます。したがって、まず、chmod コマンドを使用してファイルのアクセス許可を変更します。

chmod 000 input.txt 
ls -l input.txt

次に、パターンを検索して結果を観察してみます。

fgrep -s professionals input.txt 
echo $?

9. 部分的に一致する行を除外する方法

前の例では、fgrep コマンドが部分一致を実行することがわかりました。ただし、場合によっては、行全体の完全一致を実行する必要があります。このような場合は、fgrep コマンドの -x オプションを使用できます。

fgrep -nx "the same site is sometimes hard to find." input.txt

上記の出力では、行番号 20 で行の正確な一致が発生します。

10. 再帰的検索中にファイルを除外する方法

場合によっては、検索操作の実行中に特定のファイルをスキップする必要があります。このような場合は、fgrep コマンドの --exclude オプションを使用できます。

これを理解するには、まずディレクトリを作成し、そこにいくつかのサンプル ファイルをコピーします。

mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md 

ここで、dir-1 ディレクトリの “.txt ” ファイルを除くすべてのファイルでパターンを検索してみましょう。

fgrep -r --exclude *.txt professionals dir-1

上記の出力では、拡張子が 「.md 」 および 「.data 」 のファイルに対してパターン マッチングが実行されたことがわかります。

11. 再帰的検索中に複数のファイルタイプを除外する方法

前の例では、特定の拡張子を持つファイルを除外する方法を説明しました。ただし、複数の拡張子を持つファイルを除外する場合、コマンドは長くなります。このような場合、コマンドライン引数の代わりにファイルから除外パターンを指定できます。

そこで、複数の除外パターンを別の行に含むテキスト ファイルを作成しましょう。

cat skip-pattern.txt 
*.txt
*.data

次に、このファイルを --exclude-from オプションとともに使用してみましょう。

fgrep -r --exclude-from skip-pattern.txt professionals dir-1

ここでは、拡張子が “.md ” のファイルに対してのみパターン マッチングが実行されたことがわかります。

12. 再帰的検索中にファイルを含める方法

前の例では、検索操作を再帰的に実行しながらファイルを除外する方法を説明しました。では、逆の操作を行う方法を見てみましょう。

fgrep コマンドの --include オプションを使用して、“*.txt ” 拡張子を持つファイルの検索を実行してみましょう。

fgrep -r --include "*.txt" professionals dir-1

上記の出力では、拡張子が “*.md ” および “*.data ” のファイルではパターン マッチングがスキップされていることがわかります。

この記事では、fgrep コマンドの役立つ例をいくつか説明しました。初心者はこれらの例を日常生活で使用して、Linux を使用する際の生産性を向上させることができます。

Linux の fgrep コマンドの他の最良の例を知っていますか?以下のコメント欄であなたのご意見をお聞かせください