前書き
Linux grepコマンドは、入力をフィルタリングする方法として使用されます。
GREPはGlobal Regular Expression Printerの略で、効果的に使用するためには正規表現に関する知識が必要です。
この記事では、grepコマンドの理解に役立ついくつかの例を紹介します。
01の09
GREPを使用してファイル内の文字列を検索する方法
次の子どもの本のタイトルを持つ書籍というテキストファイルがあるとします。
- ロビンフッド
- 赤頭巾ちゃん
- ピーターパン
- ゴルディロックスと3匹のくま
- 白雪姫と七人のこびと
- ピニョーチオ
- 帽子の猫
- 三匹の子豚
- グラファロ
- チャーリーとチョコレート工場
タイトルに「The」という単語を含むすべての書籍を検索するには、次の構文を使用します。
grep本
次の結果が返されます。
- ゴルディロックスと3匹のくま
- 白雪姫と七人のこびと
- 帽子の猫
- 三匹の子豚
- グラファロ
- チャーリーとチョコレート工場
いずれの場合も、「The」という単語が強調表示されます。
検索では大文字と小文字が区別されるため、タイトルの1つに「The」ではなく「the」が含まれていれば、それは返されません。
このケースを無視するには、次のスイッチを追加します。
grep the books --ignore-case
次のように-iスイッチを使用することもできます。
grep -i本
02の09
ワイルドカードを使用してファイル内の文字列を検索する
grepコマンドは非常に強力です。 多数のパターンマッチング手法を使用して結果をフィルタリングすることができます。
この例では、 ワイルドカードを使用してファイル内の文字列を検索する方法を示します。
次のスコットランドの地名を持つ場所というファイルがあるとします。
アビデン
収差
収差
インプランター
インヴァネス
ニューバーグ
新しい鹿
新しいギャロウェイ
グラスゴー
エジンバラ
名前に反転がある場所をすべて検索するには、次の構文を使用します。
grep inver * places
アスタリスク(*)ワイルドカードは0またはそれ以上を表します。 したがって、インバーターと呼ばれる場所やインバージョンと呼ばれる場所があれば、両方が返されます。
あなたが使用できる別のワイルドカードはピリオド(。)です。 これを使用して1文字に一致させることができます。
grep inver.r places
上記のコマンドは、単調に表示されているような2つのrの間に1つのワイルドカードしか存在しないため、インジェクトされていないと思われます。
ピリオドのワイルドカードは便利ですが、検索しているテキストの一部として1つがあると問題が発生する可能性があります。
例えば、このドメイン名のリストを見る
- linux.about.com
- pcsupport.about.com
- mp3.about.com
- minecraft.about.com
- androidgames.about.com
- netforbeginners.about.com
- everydaylinuxuser.com
- google.co.uk
- google.au
- direct.gov.uk
すべてのabout.comを検索するには、次の構文を使用して検索するだけです。
grep * about *ドメイン名
リストに次の名前が含まれている場合、上記のコマンドは失敗します。
- everydaylinuxuser.com/about.html
したがって、次の構文を試すことができます:
grep * about.comドメイン名
次の名前のドメインがない限り、これは正常に機能します:
aboutycom.com
about.comという用語を実際に検索するには、次のようにドットをエスケープする必要があります。
grep * about \ .comドメイン名
あなたを示す最後のワイルドカードは、ゼロまたは1文字を表す疑問符です。
例えば:
grep?ber placenames
上記のコマンドは、aberdeen、aberystwyth、またはberwickを返します。
03の09
grepを使って行頭と行末で文字列を検索する
カラット(^)とドル記号($)を使用すると、行頭と行末でパターンを検索できます。
次のチーム名を持つfootballというファイルがあるとします。
- ブラックプール
- リバプール
- マンチェスター市
- レスター市
- マンチェスターU
- ニューカッスルユナイテッド
- FC United Of Manchester
マンチェスターで始まったすべてのチームを探したい場合は、次の構文を使用します。
grep ^ Manchesterチーム
上記のコマンドはマンチェスター・シティとマンチェスター・ユナイテッドを返すがFC United of Manchesterは返すことはない。
あるいは、次の構文を使用してUnitedで終わるすべてのチームを見つけることができます:
grep United $ teams
上記のコマンドはマンチェスター・ユナイテッドとニューカッスル・ユナイテッドを返しますが、マンチェスター・ユナイテッドFCは返しませ
04/09
grepを使って一致数を数える
grepを使用してパターンに一致する実際の行を返すことは望まないが、その数を知りたい場合は、次の構文を使用できます。
grep -cパターン入力ファイル
パターンが2回一致した場合は、2が返されます。
05の09
grepを使用して一致しない条件をすべて検索する
あなたは、以下のようにリストされた国々の地名のリストを持っているとします。
- アバディーンスコットランド
- グラスゴースコットランド
- リバプールイングランド
- コルウィン湾
- ロンドン、イギリス
あなたはcolwyn湾にそれに関連する国がないことに気づいたかもしれません。
国のあるすべての場所を検索するには、次の構文を使用できます。
grep land $ places
結果はcolwyn bayを除くすべての場所で返されます。
これは明らかに土地で終わる場所(ほとんど科学的ではない)でしか機能しません。
次の構文を使用して選択を反転することができます。
grep -v land $ places
これは土地で終わらなかったすべての場所を見つけるでしょう。
06の06
grepを使ってファイルに空行を見つける方法
次のように、空の行が見つかったときにファイルの読み込みを停止するサードパーティアプリケーションによって使用される入力ファイルがあるとします。
- アバディーンスコットランド
- インバージョンスコットランド
- リバプールイングランド
- コルウィンベイウェールズ
アプリケーションがリバプール後の行に到達すると、colwyn bayが完全に見逃されているという意味を読み上げなくなります。
grepを使用して、空白行を検索するには、次の構文を使用します。
grep ^ $ places
残念ながら、これは空白行を返すだけなので特に有用ではありません。
もちろん、ファイルが有効かどうかを確認するための空白行数を次のようにカウントすることもできます。
grep -c ^ $ places
しかし、空行を置き換えることができるように空行がある行番号を知ることは、より有益です。 あなたは次のコマンドでそれを行うことができます:
grep -n ^ $ places
07の09
grepを使用して大文字または小文字の文字列を検索する方法
grepを使用すると、次の構文を使用して、ファイル内のどの行が大文字であるかを判断できます。
grep '[AZ]'ファイル名
角括弧[]は、文字の範囲を決定します。 上の例では、AとZの間の任意の文字にマッチします。
したがって、小文字を一致させるには、次の構文を使用できます。
grep '[az]'ファイル名
数字とか他の記号ではなく文字だけをマッチさせたい場合は、以下の構文を使うことができます:
grep '[a-zA-Z]'ファイル名
次のように数字を使って同じことができます:
grep '[0-9]'ファイル名
08の09
grepを使ってパターンを繰り返す
中括弧{}を使用して繰り返しパターンを検索することができます。
次のような電話番号のファイルがあるとします。
- 055-1234
- 055-4567
- 555-1545
- 444-0167
- 444-0854
- 4549-2234
- x44-1234
あなたは数字の最初の部分が3桁である必要があり、このパターンと一致しない行を探したいと思います。
前の例から、[0-9]はファイル内のすべての数値を返すことがわかります。
この例では、3つの数字で始まり、ハイフン( - )で始まる行が必要です。 次の構文でそれを行うことができます:
grep "^ [0-9] [0-9] [0-9] - "数字
前の例からわかるように、カラット(^)は行が次のパターンで始まらなければならないことを意味します。
[0-9]は0と9の間の任意の数字を検索します。これは3回含まれているので、3つの数字と一致します。 最後にハイフンが3つの数字の後に続く必要があることを示すハイフンがあります。
中括弧を使用すると、次のように検索を小さくすることができます。
grep "^ [0-9] \ {3 \} - "の数字
スラッシュは{ブラケットをエスケープして正規表現の一部として機能しますが、本質的に[0-9] {3}は0と9の間の任意の数を3回意味します。
中かっこも次のように使用できます。
{5,10}
{5、}
{5,10}は、検索対象の文字を少なくとも5回は10回以上繰り返さなければならないことを意味し、{5、}は文字を少なくとも5回繰り返さなければならないことを意味するが、それ以上でもよい。
09 09
他のコマンドからの出力の使用grep
ここまでは、個々のファイル内のパターンマッチングを見てきましたが、grepは他のコマンドの出力をパターンマッチングの入力として使用できます。
これの大きな例は、アクティブなプロセスをリストするpsコマンドを使用することです。
たとえば、次のコマンドを実行します。
ps -ef
システム上のすべての実行中のプロセスが表示されます。
grepを使用すると、次のように特定の実行中のプロセスを検索できます。
ps -ef | grep firefox