Linuxのgrepコマンドで特定の文字列を抽出する方法!使い方やオプション一覧を紹介!
「grep」はLinuxのコマンドで、使い方は特定の文字を入力して、ファイルを特定したり、存在場所の特定、「grep」にオプションを追加して、ファイルから文字列の抽出もできます。本記事では「Linux ubuntu」で「grep」の使い方を解説をします。
目次
- 1Linuxコマンドgrepとは
- ・はじめにubuntu LInuxについて
- ・ubuntu Linuxのターミナルを起動しよう
- ・grepコマンドの基本動作
- 2Linux grepの使い方1:基本的な抽出
- ・grep で指定した文字列を抽出する
- ・grepでアンド検索での抽出方法
- 3Linux grepの使い方2:一度に複数の抽出
- ・検索を複数のファイルから
- ・複数の文字列を抽出
- 4Linux grep オプション一覧
- ・検索関連のオプション
- ・表示関連のオプション
- ・検索対象を特定したオプション
- 5Linux grep 主なオプションの実行例
- ・-i 検索:大文字と小文字を区別しない
- ・ーE OR検索:|に必要
- ・-c マッチした行数を表示する
- 6便利なLinux grepを覚えて楽をしよう!
Linuxコマンドgrepとは
Linuxコマンド「grep」は、主に文字か文字列の抽出、ファイル名およびファイルの所在を、検索するコマンドです。
grepコマンドは、Linuxのコンソール(ターミナル)で、マウスをほとんど使わず、キーボードを主体に、コマンド入力します。すなわちほとんどの作業を、黒い画面のターミナル「cui」(キャラクターユーザーインターフェース)上で行います。
grepの解説の前に、初心者の方に、本記事でメインで使用するOS、「Linux ubuntu」について簡単に説明します。次に「grep」を使用するためubuntuの、「ターミナル」や「コンソール」と呼ばれる、画面の開き方についても解説します。
”そんなことは知ってるから、grepの事を説明して”という方は、どうぞ、この章を読み飛ばしてgrepコマンド解説へ進んでも大丈夫です。
はじめにubuntu LInuxについて
下図が、Linux ubuntuのデスクトップです。Linux ubuntuは、昔のLinuxとちがいWindowsのように「GUI」(グラフィカルユーザーインターフェース)で、マウスを使いアプリケーションを動作させることが可能です。
「ubuntu」は、他のLinuxOS「centOS」「Linux mint」と比べ、使いやすく、軽い動作では、遜色のない優れたLinuxです。ubuntuは「ユーザーフレンドリー」を提唱しており、普通のパソコンとしての、「使い方」も考えて作られています。
古いパソコンでもLinux ubuntuは、軽くサクサク快適に動作しますので、もし余っているパソコンがあれば、とりあえず「ubuntu」を、インストールしてみてはいかがでしょう。
ubuntu Linuxのターミナルを起動しよう
「ubuntu」はWindowsのように、「Gui」(グラフィカルユーザーインターフェース)で、マウスを使いアイコンをクリックするという、使い方もできます。
しかし、ここでは「grepの使い方」がメインテーマのため、下記のようにubuntuで「ターミナル」を起動しましょう。
左端の「ランチャー」にある「ソフトウェアセンター」(上図1)を開いて、「インストール済み」(上図の2)をクリックします。次に「アクセサリー」のカテゴリの中から、「端末(gnome-terminal)」を開き、検索欄に「ta」か「端末」と入力して「Enterキー」を押します。
そして、「アプリケーション」に現れた「端末」(下図)をクリックします。
ubuntuの画面が「コンソール」になり、各特定コマンドを入力して設定できるようになりました。なおLinuxの環境によっては、コマンドプロンプトが「$」であったり、「%」だったりします。どちらも入力を促す記号で、あとにつづいて、コマンドを入力して実行します。
一度開いたら、左端のランチャー(ドック)の「端末アイコン」を右クリックして、「ランチャーに登録」をクリックします。これでいつでもすぐに、コンソールを開くことができます。
- ショートカットキーで「ターミナル(コンソール)」を起動する
grepコマンドの基本動作
grepコマンドで、文字や文字列を指定して、ファイルから特定の文字列を抽出したり、ファイルの所在を検索するためには、判明しているディレクトリまで、移動しなければなりません。
ディレクトリを移動する方法は、「cd」コマンドを使い移動したいディレクトリ名を指定します。「cd」コマンドは非常に多く使用することがあり、「grep」以上に使用回数の多い基本的なコマンドです。
「cd」コマンドにつづいて、ターゲットフォルダの「test」の「PATH(道順)」を入力します。
※実行すると、カレントディレクトリ⇒tempフォルダ⇒testフォルダと移動します。
フォルダ「test」に「$」が表示され「test」がカレントディレクトリになりました。※カレントディレクトリとは、特定している(現在いる)ディレクトリ(フォルダ)です。
Linux grepの使い方1:基本的な抽出
「grepの基本的な使い方①」対象とするディレクトリ(フォルダ)に移動したら、早速「grep」で任意の文字列が、ファイルにあるか検索して「抽出」してみましょう。
grep で指定した文字列を抽出する
上図は「grep」コマンドを使い「sample_01.txt」から文字列「good by」を抽出するという意味です。
上図は「good by」が「sample_01.txt」から抽出されました。ということは「sample_01.txt」は文字列「good by」を含むことが実証されたわけです。
grepでアンド検索での抽出方法
「grep基本的な使い方②」次は、grepを使用してアンド検索での抽出方法の説明です。「アンド検索」とはわかりやすく説明しますと、「A」と「B」が両方ある「ファイル」をさがす方法の事です。
下図では、「goodby」「blog」2つの文字列が「sample_02」にあることが、ファイルが判ります。
LInux grepで、「goodby」と「blog」の文字列を含むファイルを、「sample_01.txt」か「sample_05.txt」の中から、grepで「OR」検索したら「sample_2」の中に、2つの文字列が見つかりました。
※grepコマンドでの「アンド検索」には,パイプ「|」を間に挟みます。「|」は「shiftキー+¥キー」で入力できます。
$␣ grep␣ [文字列]␣ [ディレクトリ]␣ | grep␣ [文字列]
上のコマンド文が「アンド検索」の書式です。パイプ「|」を間に入力してgrepを2回使用します。
Linux grepの使い方2:一度に複数の抽出
grepの基本的なコマンド入力方法が理解できたら、やはりLinux grepの使い方で、効率よく複数の抽出を試してみたいものです。特定の文字列を、複数抽出したり、複数のファイルや複数のディレクトリの、中からの検出やファイル名の特定などです。
検索を複数のファイルから
「grepの基本的な使い方③」次は同じディレクトリ内の、「すべて(複数)のファイル」の中から、grepを使い「特定の文字列」を検索する方法です。この方法を応用すると、特定の文字列の入力で、ファイルを探すのに役立ちます。
上図のように、「grep gooby /temp/test/*」と入力します。grepは検索コマンド、goodby、は抽出文字列、/temp/test/*、はtempフォルダ内testの「すべてのファイル」という意味です。※「*」は多くの場合「すべて」という意味で使用されます。
結果、文字列「goodby」は「sample01.txt」ファイルの中にあることが判りました。
複数の文字列を抽出
Linux grepで複数の文字列の抽出や、検索を行う方法には、2種類の方法があります。1つは「OR検索」であり、2つめは「アンド検索」です。しかし2つの検索方法には「検索条件」に違いがあります。
- OR検索~どれか1つでも、あてはまれば「可」検索結果を表示します
- アンド検索~全部あてはまらないと「不可」全部あてはまれば、検索を表示します
grepコマンドで「OR」「アンド」検索する際、オプションを追加したり、別のgrepコマンドを使用することもあります。
- OR検索~「-E」、「|」、「egrep」
- アンド検索~「|」、「grep [文字列A] | grep [文字列]
※「アンド検索」は上記ですでに紹介済みで、「OR検索」は下記に記述しております。
Linux grep オプション一覧
下記にLinux grep の、オプション一覧を記載します。説明文はなるべく、抽象的表現は避けて一般化しましたが、判りにくい部分もあるかと思います、その点は実際に試して理解を深めてください。
検索関連のオプション
下の表は、Linux grepコマンドの検索関連のオプションです。
-e | 一致処理に指定した文字を使う |
-G | 検索文字列で検索する |
-E | 入力文字で検索を行う |
-P | 検索にPerl正規表現を使う |
-f ファイル | 検索文字列を指定したファイルから読み込みます。 |
-i | 大文字と小文字を区別しないで検索します |
-w | 指定した文字を単語として検索します。 |
-x | 検索文字列に一致する、行を表示します |
表示関連のオプション
次に掲げる表は、Linux grepコマンドの表示関連のオプションです。
-v | マッチ(一致)しない行を表示する |
-s | エラーメッセージを表示しません。 |
-q | 一度だけ検索を行い、結果を表示しません。 |
-L | 検索した結果、該当しなったファイルを表示する |
-l | 検索結果にファイル名のみ表示する |
-c | 一致する文字列が含まれている回数のみ表示 |
-m 回数 | パターンが指定した回数に達したら処理を終了する |
-o | 検索結果に一致した文字を表示する |
-n | 検索した結果、該当文字列の行番号を表示する |
-b | 各行の先頭に検索した行があるブロック番号を表示します。 |
-H | 検索中のファイル名を表示します。 |
-h | 検索結果にファイル名を表示しない |
-B 行数 | 検索文字列が見つかった行から前の行を指定した行数分表示します |
-A 行数 | 一致した行の後の行も表示する |
-C 行数,-行数 | 検索結果に一致した箇所から前後に指定した行数表示する |
検索対象を特定したオプション
最後はLinux grepの「検索対象」を特定したオプションです。
-d action | 対象にディレクトリを指定したときの動作(action部分にread、recurse、skipを指定) |
-r | ディレクトリ内も検索対象とする |
-R | サブディレクトリを含めて検索、リンクの先も対象とする |
Linux grep 主なオプションの実行例
ここからはgrepのオプションの中でも代表的な「-i」、「-c」、OR検索に必要な「-E」の各オプションを実際に使って検証をしてみます。
-i 検索:大文字と小文字を区別しない
Linux grepコマンドの「-i」オプションは、特定の文字列の「大文字」「小文字」を、区別せずに抽出するオプションです。
使い方は、検索したいディレクトリに移動して、上記のようにgrepに「-i」オプションを追加して、抽出したい文字列とディレクトリを指定して、「Enter」を押します。結果は上のように、文字「a」「A」を含んだ単語と、ファイル名が表示されました。
ーE OR検索:|に必要
ここでは2つの単語を含む「文字列」「ファイル」を検索します。
grep OR検索の書式は以下の通りです。2つの検索項目の間に「|」を入力して、検索するディレクトリ(フォルダ)を指定して「Enter」を押しますと、検索結果が表示されます。
$ grep␣ -E␣ ’ABC␣ |␣ DEF’␣UFO /*
※「␣」は半角スペースです。「/*」はディレクトリの中、すべてのファイルという意味です。「|」は項目と項目の間に入力して、「~と~」の「と」の意味です。
Linuxコマンドの、grepで「or」検索するときには、上記のように記述します。検索文字や文字列には「正規表現」で入力します。上のコマンド文の意味は、”ABCかDEFの、どちらかを含むファイルを、「UFO」ディレクトリの全ファイルから抽出”の意味です。
-c マッチした行数を表示する
Linux grepコマンドには、検索文字列にマッチ(一致)した行数を表示する、「-c」というgrep のオプションがあります。
上記のようなgrep␣-c␣検索文字列␣検索ファイルの書式で実行すると文字列を含む行数が表示されます。
便利なLinux grepを覚えて楽をしよう!
数あるLinuxコマンドの中でも、「grep」は「ファイルの検索」「文字列の抽出」に、とても便利なコマンドです。また「grep」に、オプションを追加すると、アプリ顔負けの「再帰的grep検索」「圧縮ファイル内をgrep」での検索、抽出も可能です。