はじめに
grep コマンド( G の略) ローブR egular E 表現P rint)は、ファイルやディレクトリを検索するための強力なテキスト処理ツールです。
grepの場合 正規表現と組み合わされます (登録 ular ex プレス)、高度な検索と出力フィルタリングが簡単になります。システム管理者、開発者、および通常のユーザーは、 grepを使用して正規表現を習得することでメリットが得られます。 指図。
このガイドでは、grepの方法を説明しています。 例を通して正規表現を使用します。
前提条件
- 端末/コマンドラインへのアクセス。
- 検索するテキストファイル。例では、 .bashrcを使用しています ファイル。
- 基本的なgrepコマンドの使用法。
Grep正規表現
grepの構文 コマンドには、次の形式の正規表現が含まれています:
grep [regex] [file] 正規表現は、データとファイルのフィルタリングに役立つ単純なステートメントです。 awkコマンドやsedコマンドなどの多くのLinuxコマンドも、正規表現を使用して情報を検索および操作します。
2つの一般的な文字タイプが正規表現ステートメントを構成します:
- リテラル 、これは標準のテキスト文字です。
- 特別 文字またはメタ文字 バックスラッシュ(
\)でエスケープしない限り、特別な意味があります 。
grep コマンドは、3つの正規表現構文オプションを提供します。
1.基本的な正規表現( BRE )
2.拡張正規表現( ERE )
3.パール互換の正規表現( PCRE )
デフォルトでは、 grep BREを使用します 構文。
Grep正規表現の例
次のコマンドを実行して、grep正規表現がどのように機能するかをテストします。
grep if .bashrc
正規表現は文字列を検索します。結果には、文字 iが含まれるすべてのインスタンスが表示されます。 が表示され、その後に fが続きます .bashrc内 ファイル。したがって、出力では次の結果が強調表示されます。
- 場合
- el if
- if y
- ident if ying
このコマンドは、一致する行のみを返します。
Grepで正規表現を使用する方法
Regexは、 grepを使用して検索を絞り込むための多くの可能性を提供します 。以下は、基本的な構文とロジックを説明するいくつかの一般的な例です。一致を組み合わせて、複雑な正規表現ステートメントを作成します。
文字通りの一致
リテラル一致は、指定された文字列と完全に一致します。 ifの前の式の例 文字通りの一致を示します。
検索では大文字と小文字が区別されます。次のコマンドは、前の例とは異なる結果を返します。
grep If .bashrc
複数の単語を検索するには、引用符を追加します:
grep "if the" .bashrc
引用符を省略すると、2番目の単語がファイルまたは場所として扱われます。
アンカーマッチ
アンカーの一致は、検索での行の位置を指定します。 2つのアンカータイプがあります:
- カレットサイン(
^)指定された式で始まる一致行を検索します。 - ドル記号(
$)提供されたリテラルで終わる一致行を検索します。
たとえば、 aliasという単語で始まる行を照合するには .bashrc内 ファイル、使用:
grep ^alias .bashrc
検索では、単語の前にタブやスペースがある行は表示されません。
thenという単語で終わる行を照合するには .bashrc内 ファイル、実行:
grep then$ .bashrc
両方のアンカーを使用して、1行の単一の単語またはステートメントを検索する正規表現ステートメントを作成します。
grep ^esac$ .bashrc
ファイル内の空の行を見つけるには、アンカーのみを使用します。 -nを追加します 出力に行番号を表示するオプション:
grep -n ^$ .bashrc
-nなし オプションの場合、出力は空白です。
任意の文字に一致
期間(. )正規表現メタ文字は、記号の代わりに任意の文字と一致します。例:
grep r.o .bashrc
出力には、文字 rのすべてのインスタンスが表示されます 、その後に任意の文字、その後に o 。ピリオドは、文字、数字、記号、スペースなどの任意の文字にすることができます。
複数の文字プレースホルダーを示すために複数のピリオドを追加します:
grep r..t .bashrc
アンカーマッチングと組み合わせて、複雑な正規表現ステートメントを作成します。例:
grep ..t$ .bashrc
このステートメントは、任意の2文字の後に文字 tが続くすべての行を検索します。 最後に。
ブラケット式
角かっこ式を使用すると、ある位置で複数の文字または文字範囲を一致させることができます。たとえば、andを含むすべての行を照合します またはend .bashrc内 ファイルには、次のパターンを使用します:
grep [ae]nd .bashrc
角かっこ式では、カレットを追加して文字を除外できます( ^ ) サイン。たとえば、andを除くすべてに一致させる またはend 、使用:
grep [^ae]nd .bashrc
角かっこ式を使用して、ハイフン( -)を追加して文字範囲を指定します )最初の文字と最後の文字の間。たとえば、大文字のすべてのインスタンスを検索します:
grep [A-Z] .bashrc
角かっこ式とアンカーマッチングを組み合わせて、大文字で始まるすべての単語を検索します。
grep ^[A-Z] .bashrc
角かっこ式では、複数の範囲を使用できます。たとえば、文字以外のすべての文字を次の文字と一致させます。
grep [^a-zA-Z] .bashrc
出力では、すべての文字を無視して、数字と文字が強調表示されます。
キャラクタークラス
Grepは、角かっこ式を単純化するために、事前定義された関数として標準の文字クラスを提供します。以下は、いくつかのクラスとそれに相当するブラケット式の概要を示す表です。
| 構文 | 説明 | 同等 |
|---|---|---|
[[:alnum:]] | すべての文字と数字。 | "[0-9a-zA-Z]" |
[[:alpha:]] | すべての文字。 | "[a-zA-Z]" |
[[:blank:]] | スペースとタブ。 | [CTRL+V<TAB> ] |
[[:digit:]] | 数字0から9。 | [0-9] |
[[:lower:]] | 小文字。 | [a-z] |
[[:punct:]] | 句読点とその他の文字。 | "[^a-zA-Z0-9]" |
[[:upper:]] | 大文字。 | [A-Z] |
[[:xdigit:]] | 16進数。 | "[0-9a-fA-F]" |
grep文字クラスの完全なリストは、grepマニュアルにあります。
数量詞
数量詞は、出現回数を指定するメタ文字です。次の表に、各grep数量詞の構文と簡単な説明を示します。
| 構文 | 説明 |
|---|---|
* | 一致数がゼロ以上 |
? | ゼロまたは1つの一致。 |
+ | 1つ以上の一致。 |
{n} | n 一致します。 |
{n,} | n 以上の一致。 |
{,m} | 最大m 一致します。 |
{n,m} | nから 最大m 一致します。 |
* 符号はパターンと0回以上一致します。実例を示すために、次のコマンドを実行します。
grep m*and .bashrc
この場合、 * 記号は文字mと一致します ゼロ回以上。したがって、「and 、mand 、 mmand "はすべて一致します。文字m *が続く場合は、何度でも繰り返します サイン。
ゼロまたは正確に1つの一致に一致させるには、 ?を使用します サイン。ステートメントを一重引用符で囲み、解釈を避けるために文字をエスケープします。例:
grep 'm\?and' .bashrc
または、拡張正規表現を使用して、エスケープを回避します。
grep -E 'm?and' .bashrc
出力では、andのすべてのインスタンスが強調表示されます またはmand 。
範囲数量詞を使用して、正確な繰り返し回数を指定します。たとえば、2つの母音を持つ文字列を検索します。
grep '[aeiouAEIOU]\{2\}' .bashrc grep -E '[aeiouAEIOU]{2}' .bashrc
出力では、2つの母音を持つすべての単語が強調表示されます。
代替
交互に、代替一致を定義できます。代替文字列を一重引用符で囲み、それぞれをエスケープされたパイプ文字( \|)で区切ります。 )。
たとえば、 bashという単語を検索するには またはalias .bashrc内 ファイル、使用:
grep 'bash\|alias' .bashrc
または、拡張正規表現を使用してエスケープ文字を省略します:
grep -E 'bash|alias' .bashrc 出力では、ファイル内の両方の文字列インスタンスが強調表示されます。
グループ化
正規表現を使用すると、パターンを1つのアイテムにグループ化できます。通常の正規表現の場合は、グループをエスケープされた括弧に入れるか、拡張を使用します。
たとえば、文字列 bashrcを検索します rcを作成します オプションの文字:
grep 'bash\(rc\)\?' .bashrc grep -E 'bash(rc)?' .bashrc
出力は、 bashrcのすべてのインスタンスを強調表示します 。 rc以降 オプションの場合、コマンドは bashという単語にも一致します 。
特殊な円記号式
grepコマンドは、高度な単語境界マッチングのためのいくつかの一意の円記号式を提供します。以下は、各式の種類の簡単な例を示した表です。
| 構文 | 例 | 一致 (太字のテキストは一致を表します) |
|---|---|---|
\b | '\ band \ b' | および 「および 「」 \および \ <スペース>および |
\B | '\ Band' | _および _および _ sおよび hおよび y |
\< | '\<および' | および 「および 「」 および y および _ <スペース>および |
\> | 'and \>' | および "と" sおよび _および <スペース>および |
\w | '\ wand' | _and _および _ 手 y 砂 |
\W | '\ Wand' | "および 「」 /および / |
\s | '\ sand' | <タブ>および |
\S | '\ Sand' | _and "および 「」 砂 手 y _および _ /および / |
たとえば、 \bを使用します 別の単語の一部ではない単語を見つけるための境界:
grep '\bse[et]\b' .bashrc
この式は単語を検索しますsee およびset 。境界は単語の分離を保証します。
メタキャラクターのエスケープ
メタ文字をエスケープすると、特殊文字はリテラルとして扱われます。たとえば、行末のピリオド(。)を検索するには、メタ文字をエスケープします。
grep '\.$' .bashrc
文字の解釈を許可しないと、ソースコードまたは構成ファイルを検索するときに役立ちます。