Linux/UNIXでのGrepコマンド

何がGrepですか

Grepは、「グローバル正規表現プリント」の略で、正規表現を使用してファイル内のテキストパターンを検索および一致させるためのコマンドです。さらに、このコマンドはあらゆるLinuxディストリビューションに事前インストールされています。このガイドでは、最も一般的なgrepコマンドの使用法と一般的なユースケースについて説明します。

LinuxのGrepコマンド

Grepコマンドは、テキストファイル内の正規表現または文字列を検索するために使用できます。これを実証するために、テキストファイルwelcome.txtを作成し、次に示すように内容を追加します。

Welcome to Linux !
Linux is a free and opensource Operating system that is mostly used by
developers and in production servers for hosting crucial components such as web
and database servers. Linux has also made a name for itself in PCs.
Beginners looking to experiment with Linux can get started with friendlier linux
distributions such as Ubuntu, Mint, Fedora and Elementary OS.

素晴らしい!これで、いくつかのgrepコマンドを実行し、出力を操作して所望の結果を取得する準備が整いました。ファイル内の文字列を検索するには、以下のコマンドを実行します。構文

$ grep "string" file name

または

$ filename grep "string"

:

$ grep "Linux" welcome.txt

出力 grepは「Linux」という文字列を検索および一致させるだけでなく、その文字列が含まれる行も印刷しています。ファイルが異なるファイルパスにある場合は、以下に示すようにファイルパスを指定してください。

$ grep "string" /path/to/file

–colorオプションを使用してGrepの結果に色を付ける

検索文字列やパターンが他のテキストと異なる色で表示されないシステムで作業している場合は、--colorを使用して結果を目立たせることができます。例

$ grep --color "free and opensource" welcome.txt 

出力

すべてのディレクトリで再帰的に文字列を検索する

現在のディレクトリとそのサブディレクトリで文字列を検索したい場合は、-rフラグを使用して検索します

$ grep -r "string-name" *

例えば

$ grep -r "linux" *

出力

大文字と小文字を区別しないで検索する

上記の例では、検索結果が求めているものを提供しました。これは、文字列「Linux」が大文字で指定され、ファイル内にも大文字で存在しているためです。では、小文字で文字列を検索してみましょう。

$ grep "linux" file name

出力から何も表示されませんね。これは、最初の文字が小文字のため、greppingが文字列「linux」を見つけて一致させることができなかったからです。大文字小文字を区別しないようにするには、-iフラグを使用して以下のコマンドを実行します。

$ grep -i "linux" welcome.txt

出力 素晴らしいですね。-iは通常、文字列を大文字小文字を区別せずに表示するために使用されます。

マッチした文字列の行数を -c オプションで数える

文字列パターンが表示される行の総数を数えるには、以下のコマンドを実行します。

$ grep -c "Linux" welcome.txt

出力

出力を反転するためにGrepを使用する

Grepの出力を反転させるには、-vフラグを使用します。-vオプションは、grepに対して式と一致しないすべての行を印刷するよう指示します。-vオプションはgrepに対して出力を反転させ、一致する行を印刷するのではなく、逆に式と一致しないすべての行を印刷することを意味します。ファイルに戻って、表示された行番号を表示しましょう。VimエディタでESCを押し、フルコロンの後に

 set nu

を入力してEnterを押します。出力 さて、「Linux」という文字列を含まない行を表示するには、次のコマンドを実行します。

$ grep -v "Linux" welcome.txt

出力 grepは検索パターンを含まない行を表示しました。

検索パターンを含む行に行番号を付けるには、-nオプションを使用します

文字列パターンが一致する行に行番号を付けるには、次のように-nオプションを使用します

$ grep -n "Linux" welcome.txt

出力

-wオプションを使用して正確な一致単語を検索します

-wフラグを渡すと、表示されるように、正確な一致単語を含む行を検索します

$ grep -w "opensource" welcome.txt

出力 ただし、試してみると

$ grep -w "open" welcome.txt

パターンではなく正確な単語を検索しているため、結果は返されません!

grepとパイプを使用する

grepコマンドは、異なる出力を得るためにパイプと一緒に使用できます。たとえば、特定のパッケージがUbuntuシステムにインストールされているかどうかを知りたい場合は、次のコマンドを実行します

$ dpkg -L | grep "package-name"

たとえば、システムにOpenSSHがインストールされているかどうかを調べるには、dpkg -lコマンドをgrepにパイプします

$ dpkg -L | grep -i "openssh"

出力

パイプを使用して検索パターンの前後の行数を表示する

-Aまたは-Bを使用して、検索文字列の前後に表示する行数を指定できます。-Aフラグは検索文字列の後に表示される行を示し、-Bは検索文字列の前に表示される出力を表示します。例えば、

$ ifconfig | grep -A 4 ens3

このコマンドは、ifconfigコマンドのens文字列の後にある行とその後の4行のテキストを表示します。出力逆に、以下の例では、-Bフラグの使用により、ifconfigコマンドのether文字列の前の行とその前の3行のテキストが表示されます。出力

$ ifconfig | grep -B 4 ether

正規表現(REGEX)を使用したgrepの使用方法

REGEXとは、正規表現(REGular EXpression)の略です。REGEXはパターンに一致する文字列のシーケンスです。以下にいくつかの例を示します:

^      Matches characters at the beginning of a line
$      Matches characters at the end of a line
"."    Matches any character
[a-z]  Matches any characters between A and Z
[^ ..] Matches anything apart from what is contained in the brackets

特定の文字で始まる行を印刷するには、構文は次のようになります;

grep ^character file_name

例えば、welcome.txtファイルで文字「d」で始まる行を表示する場合、次のように実行します。

$ grep ^d welcome.txt 

出力 「x」で終わる行を表示するには、次のように実行します。

$ grep x$ welcome.txt

出力

さらなるGrepオプションでのヘルプの取得

Grepコマンドの使用方法についてさらに学びたい場合は、以下のコマンドを実行して、他のフラグやオプションを一緒に使用できるプレビューを取得してください。

$ grep --help

サンプル出力 このチュートリアルをご覧いただき、ありがとうございます。コマンドを試してみて、ご感想をお知らせください。

Source:
https://www.digitalocean.com/community/tutorials/grep-command-in-linux-unix