Linux/UNIXにおけるGrepコマンド

LinuxやUnixシステムでは、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 command usage
$ grep "string" /path/to/file

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

もし検索文字列やパターンが他のテキストと異なる色で表示されないシステムで作業している場合、–colorオプションを使用して結果を目立たせるようにしてください。例えば、

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

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

「-r」フラグを使用して、現在のディレクトリおよびサブディレクトリ内で文字列を検索したい場合は、下記のように検索してください。

$ grep -r "string-name" *

たとえば

$ grep -r "linux" *
grep command usage example

大文字と小文字の区別を無視する。

上記の例では、検索結果が希望通りのものを提供してくれました。なぜならば文字列「Linux」が大文字で指定され、ファイル内にも大文字で存在していたからです。さて、次は同じ文字列を小文字で検索してみましょう。

$ grep "linux" file name

出力には何もありませんよね?これは、最初の文字が小文字であるため、grepが文字列「linux」を見つけることができずに一致しませんでした。大文字と小文字を無視するには、-iフラグを使用して、以下のコマンドを実行してください。

$ grep -i "linux" welcome.txt
grep command usage examples

「-c オプションで、文字列が一致する行の数を数えてください。」

指定した文字列パターンが出現または存在する全行数をカウントするために、以下のコマンドを実行してください。

$ grep -c "Linux" welcome.txt
grep command usage examples

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

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

 set nu
grep command usage examples
$ grep -v "Linux" welcome.txt
grep command usage examples

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

文字列パターンが一致する行に行番号を付けるために、-nオプションを使ってください。

$ grep -n "Linux" welcome.txt
grep command usage examples

-wオプションを使用して、完全一致する単語を検索してください。

その場合、-wフラグを指定すると、表示される単語と完全に一致する行を検索します。

$ grep -w "opensource" welcome.txt
grep command usage examples
$ grep -w "open" welcome.txt

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

grepを使用してパイプを使う。

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

$ dpkg -L | grep "package-name"

例えば、OpenSSHがシステムにインストールされているかどうかを調べるために、dpkg -lコマンドをgrepにパイプして表示すると、次のようになります。

$ dpkg -L | grep -i "openssh"
grep command usage

検索パターンの前後に行数を表示する場合、パイプを使用します。

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

$ ifconfig | grep -A 4 ens3
grep usage commands
$ ifconfig | grep -B 4 ether
grep command usage

正規表現(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 
grep regex example
$ grep x$ welcome.txt
grep regex end of line

より多くのGrepオプションを使用して支援を受ける

もしGrepコマンドの使用方法についてもっと学びたい場合は、以下のコマンドを実行して、コマンドと一緒に使用できる他のフラグやオプションの一部を事前に確認することができます。

$ grep --help
grep command usage
コメントを残す 0

Your email address will not be published. Required fields are marked *