Linux grepコマンドは、入力をフィルタリングする方法として使用されます。 GREPはGlobal Regular Expression Printerの略で、効果的に使用するためには正規表現に関する知識が必要です。
この記事では、grepコマンドの理解に役立ついくつかの例を学びます。
01の09GREPを使用してファイル内の文字列を検索する方法

次の子どもの本のタイトルを持つ書籍というテキストファイルがあるとします。
- ロビンフッド
- 赤頭巾ちゃん
- ピーターパン
- ゴルディロックスと3匹のくま
- 白雪姫と七人のこびと
- ピニョーチオ
- 帽子の猫
- 三匹の子豚
- グラファロ
- チャーリーとチョコレート工場
タイトルに「The」という単語を含むすべての書籍を検索するには、次の構文を使用します。
grep本次の結果が返されます。
- ゴルディロックスと3匹のくま
- 白雪姫と七人のこびと
- 帽子の猫
- 三匹の子豚
- グラファロ
- チャーリーとチョコレート工場
いずれの場合も、「The」という単語が強調表示されます。
検索では大文字と小文字が区別されるため、タイトルの1つに「The」ではなく「the」が含まれていれば、それは返されません。
このケースを無視するには、次のスイッチを追加します。
grep the books --ignore-case次のように-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.comabout.comという用語を実際に検索するには、次のようにドットをエスケープする必要があります。
grep * about .comドメイン名あなたを示す最後のワイルドカードは、ゼロまたは1文字を表す疑問符です。
例えば:
grep?ber placenames上記のコマンドは、aberdeen、aberystwyth、またはberwickを返します。
続きを読む
03の09grepを使って行頭と行末で文字列を検索する
カラット(^)とドル記号($)を使用すると、行頭と行末でパターンを検索できます。
次のチーム名を持つfootballというファイルがあるとします。
- ブラックプール
- リバプール
- マンチェスター市
- レスター市
- マンチェスターU
- ニューカッスルユナイテッド
- FC United Of Manchester
マンチェスターで始まったすべてのチームを探したい場合は、次の構文を使用します。
grep ^ Manchesterチーム上記のコマンドはマンチェスター・シティとマンチェスター・ユナイテッドを返すがFC United of Manchesterは返すことはない。
また、次の構文を使用してUnitedで終わるすべてのチームを見つけることもできます。
grep United $ teams上のコマンドはマンチェスター・ユナイテッドとニューカッスル・ユナイテッドに戻るがFC United of Manchesterは戻さない。
04/09grepを使って一致数を数える
grepを使用してパターンに一致する実際の行を返すことは望まないが、その数を知りたい場合は、次の構文を使用できます。
grep -cパターン入力ファイルパターンが2回一致した場合は、2が返されます。
続きを読む
05の09grepを使用して一致しない条件をすべて検索する
あなたは、以下のようにリストされた国々の地名のリストを持っているとします。
- スコットランドのaberdeen
- グラスゴースコットランド
- リバプールイングランド
- コルウィン湾
- ロンドン、イギリス
あなたはcolwyn湾にそれに関連する国がないことに気づいたかもしれません。
国のあるすべての場所を検索するには、次の構文を使用できます。
grep land $ places結果はcolwyn bayを除くすべての場所で返されます。
これは明らかに土地で終わる場所(ほとんど科学的ではない)でしか機能しません。
次の構文を使用して選択範囲を反転することができます。
grep -v land $ placesこれは土地で終わらなかったすべての場所を見つけるでしょう。
06の06grepを使ってファイルに空行を見つける方法
次のように、空の行が見つかったときにファイルの読み込みを停止するサードパーティアプリケーションによって使用される入力ファイルがあるとします。
- アバディーンスコットランド
- インバージョンスコットランド
- リバプールイングランド
- コルウィンベイウェールズ
アプリケーションがリバプール後の行に到達すると、colwyn bayが完全に見逃されているという意味を読み上げなくなります。
grepを使用して、空白行を検索するには、次の構文を使用します。
grep ^ $ places残念ながら、これは空白行を返すだけなので特に有用ではありません。
もちろん、ファイルが有効かどうかを確認するための空白行数を次のようにカウントすることもできます。
grep -c ^ $ placesしかし、空行を置き換えることができるように空行がある行番号を知ることは、より有益です。あなたは次のコマンドでそれを行うことができます:
grep -n ^ $ places続きを読む
07の09grepを使用して大文字または小文字の文字列を検索する方法
grepを使用すると、次の構文を使用して、ファイル内のどの行が大文字であるかを判断できます。
grep 'A-Z'ファイル名大括弧は、文字の範囲を決定します。上の例では、AとZの間の任意の文字にマッチします。
したがって、小文字を一致させるには、次の構文を使用できます。
grep 'a-z'ファイル名数字とか他の記号ではなく文字だけをマッチさせたい場合は、以下の構文を使うことができます:
grep 'a-zA-Z'ファイル名次のように数字を使って同じことができます:
grep '0-9'ファイル名 08の09grepを使ってパターンを繰り返す
中括弧{}を使用して繰り返しパターンを検索することができます。
次のような電話番号のファイルがあるとします。
- 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概要
grepコマンドは基本的なLinuxコマンドであり、ターミナルを使用するときにファイルやプロセスを検索する際に、あなたの人生をはるかに簡単にするので、学習する価値があります。




