
grep
は、テキスト処理のためのLinuxで最も便利で強力なコマンドの1つです。 grep
1つ以上の入力ファイルで正規表現に一致する行を検索し、一致する各行を標準出力に書き込みます。
この記事では、GNUバージョンの grep
で正規表現を使用する方法の基本について説明します。 、これはほとんどのLinuxオペレーティングシステムでデフォルトで使用できます。
Grep正規表現#
正規表現または正規表現は、文字列のセットに一致するパターンです。パターンは、演算子、構成リテラル文字、および特別な意味を持つメタ文字で構成されます。 GNU grep
Basic、Extended、Perl互換の3つの正規表現構文をサポートします。
最も単純な形式では、正規表現タイプが指定されていない場合、 grep
検索パターンを基本的な正規表現として解釈します。パターンを拡張正規表現として解釈するには、 -E
を使用します (または-extended-regexp
)オプション。
GNUのgrep
の実装 基本的な正規表現構文と拡張正規表現構文の間に機能的な違いはありません。唯一の違いは、基本的な正規表現ではメタ文字?
、 +
、{コード> 、
|コード> 、
(コード> 、および
)
リテラル文字として解釈されます。基本的な正規表現を使用するときにメタ文字の特別な意味を維持するには、文字をバックスラッシュ( \
)でエスケープする必要があります。 )。これらおよびその他のメタキャラクターの意味については、後で説明します。
通常、シェルによるメタ文字の解釈と拡張を避けるために、正規表現は常に一重引用符で囲む必要があります。
文字通りの一致#
grep
の最も基本的な使用法 コマンドは、ファイル内のリテラル文字または一連の文字を検索することです。たとえば、 / etc / passwd
に文字列「bash」を含むすべての行を表示するには ファイルの場合、次のコマンドを実行します:
grep bash /etc/passwd
出力は次のようになります。
root:x:0:0:root:/root:/bin/bash
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
この例では、文字列「bash」は4つのリテラル文字で構成される基本的な正規表現です。これはgrep
に通知します 「b」の直後に「a」、「s」、「h」が続く文字列を検索します。
デフォルトでは、 grep
コマンドでは大文字と小文字が区別されます。これは、大文字と小文字が別個のものとして扱われることを意味します。
検索時に大文字と小文字を区別しない場合は、 -i
を使用します オプション(または-ignore-case
。
grep
に注意することが重要です 検索パターンを単語ではなく文字列として検索します。したがって、「gnu」を検索している場合は、 grep
また、「gnu」が「cygnus」や「magnum」などの大きな単語に埋め込まれている行も印刷されます。
検索文字列にスペースが含まれている場合は、一重引用符または二重引用符で囲む必要があります。
grep "Gnome Display Manager" /etc/passwd
アンカー#
アンカーはメタ文字であり、行のどこで一致を見つける必要があるかを指定できます。
^
(caret)記号は、行頭の空の文字列と一致します。次の例では、文字列「linux」は、行の先頭にある場合にのみ一致します。
grep '^linux' file.txt
$
(ドル)記号は、行頭の空の文字列と一致します。文字列「linux」で終わる行を見つけるには、次を使用します。
grep 'linux$' file.txt
両方のアンカーを使用して正規表現を作成することもできます。たとえば、「linux」のみを含む行を検索するには、次のコマンドを実行します。
grep '^linux$' file.txt
もう1つの便利な例は、 ^ $
です。 すべての空の行に一致するパターン。
一致する単一文字#
。コード> (ピリオド)記号は、任意の1文字に一致するメタ文字です。たとえば、「kan」で始まり、2文字で、「roo」という文字列で終わるものに一致させるには、次のパターンを使用します。
grep 'kan..roo' file.txt
ブラケット式#
角かっこ式を使用すると、文字のグループを角かっこで囲むことで一致させることができます []
。たとえば、「accept」または「accent」を含む行を見つけるには、次の式を使用できます。
grep 'acce[np]t' file.txt
角かっこ内の最初の文字がカレットの場合^
、次に、角かっこで囲まれていない任意の1文字に一致します。次のパターンは、「co」で始まり、「l」の後に「la」が続く文字以外の文字列(「coca」、「cobalt」など)の任意の組み合わせに一致しますが、「cola」を含む行には一致しません。 」:
grep 'co[^l]a' file.txt
文字を1つずつ配置する代わりに、角かっこ内に文字の範囲を指定できます。範囲式は、範囲の最初と最後の文字をハイフンで区切って指定することによって作成されます。例: [a-a]
[abcde]
と同等です および[1-3]
[123]
と同等です 。
次の式は、大文字で始まる各行に一致します。
grep '^[A-Z]' file.txt
grep
角かっこで囲まれた定義済みの文字クラスもサポートします。次の表に、最も一般的な文字クラスのいくつかを示します。
Quantifier | キャラクタークラス |
---|---|
[:alnum:] | 英数字。 |
[:alpha:] | アルファベット文字。 |
[:blank:] | スペースとタブ。 |
[:digit:] | 数字。 |
[:lower:] | 小文字。 |
[:upper:] | 大文字。 |
すべての文字クラスの完全なリストについては、Grepマニュアルを確認してください。
数量詞#
数量詞を使用すると、一致が発生するために存在する必要があるアイテムの出現回数を指定できます。次の表は、GNU grep
でサポートされている数量詞を示しています。 :
Quantifier | 説明 |
---|---|
* | 前のアイテムを0回以上一致させます。 |
? | 前のアイテムを0回または1回一致させます。 |
+ | 前のアイテムを1回以上一致させます。 |
{n} | 前のアイテムと正確に一致するn |
{n、} | 前のアイテムと少なくともn 一致します |
{、m} | 前の項目に一致する最大m |
{n、m} | n の前のアイテムと一致します m へ |
*
(アスタリスク)文字が前の項目と0回以上一致している。以下は、「right」、「sright」、「ssright」などに一致します。
grep 's*right'
以下は、大文字で始まり、ピリオドまたはコンマで終わるすべての行に一致する、より高度なパターンです。 。*
正規表現は任意の数の任意の文字に一致します:
grep -E '^[A-Z].*[.,]$' file.txt
?コード> (疑問符)文字は前の項目をオプションにし、1回だけ一致できます。以下は「明るい」と「正しい」の両方に一致します。
?コード> 基本的な正規表現を使用しているため、文字はバックスラッシュでエスケープされます:
grep 'b\?right' file.txt
拡張正規表現を使用した同じ正規表現は次のとおりです。
grep -E 'b?right' file.txt
+
(プラス)文字が前の項目と1回以上一致している。以下は「sright」と「ssright」に一致しますが、「right」には一致しません。
grep -E 's+right' file.txt
中括弧文字{}
正確な数、上限または下限、または一致が発生するために発生する必要のある発生範囲を指定できます。
以下は、3〜9桁のすべての整数に一致します。
grep -E '[[:digit:]]{3,9}' file.txt
交互という用語は、単純な「OR」です。代替演算子|
(パイプ)を使用すると、リテラル文字列または式セットである可能性のあるさまざまな一致を指定できます。この演算子は、すべての正規表現演算子の中で最も優先順位が低くなっています。
以下の例では、 fatal
という単語のすべての出現箇所を検索しています。 、エラー
、およびクリティカル
Nginxログエラーファイル内:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
拡張正規表現を使用する場合は、演算子 |
以下に示すように、エスケープしないでください:
grep -E 'fatal|error|critical' /var/log/nginx/error.log
グループ化は正規表現の機能であり、パターンをグループ化して1つのアイテムとして参照できます。グループは括弧()
を使用して作成されます 。
基本的な正規表現を使用する場合、括弧は円記号( \
)でエスケープする必要があります 。
次の例は、「fearless」と「less」の両方に一致します。 ?コード> 数量詞は
(fear)
を作成します オプションのグループ:
grep -E '(fear)?less' file.txt
特別なバックスラッシュ式#
GNU grep
バックスラッシュとそれに続く通常の文字で構成されるいくつかのメタ文字が含まれます。次の表は、最も一般的な特殊な円記号式の一部を示しています。
式 | 説明 |
---|---|
\ b | 単語の境界に一致します。 |
\ < | 単語の先頭で空の文字列を照合します。 |
\> | 単語の末尾で空の文字列を照合します。 |
\ w | 単語を一致させます。 |
\ s | スペースを一致させます。 |
次のパターンは、「abject」と「object」という別々の単語に一致します。大きな単語に埋め込まれている場合、単語と一致しません:
grep '\b[ao]bject\b' file.txt
結論#
正規表現は、テキストエディタ、プログラミング言語、および grep
などのコマンドラインツールで使用されます。 、 sed
、および awk
。正規表現の作成方法を知っていると、テキストファイルの検索、スクリプトの記述、またはコマンド出力のフィルタリングに非常に役立ちます。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。