8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Grepコマンドを知ろう

Last updated at Posted at 2023-05-02

Linuxには便利なフィルタコマンドなるものが存在します。
今回はそのフィルタコマンドの中でも「Grep」コマンドを紹介します。
では早速見ていきましょう!

Grepコマンドとは

まずはGrepコマンドとはどういう役割なのかを知りましょう。
Grepコマンドは文字列を検索するコマンドです。
役割から大事なコマンドであることがわかると思います。
細かく言うと、指定した文字列と一致する文字列のある行を取得するという機能があります。
この「一致」の範囲はオプションで定めることができます。
オプションについては後で説明しますので、次はGrepの基本的な使い方を見てみましょう!

Grepコマンドの使い方

grep <検索文字列> <検索対象ファイル名>

※ここではわかりやすいように「検索文字列」としていますが、正確に言うと「検索パターン」といって、正規表現等でも大丈夫です。今回は文字列に絞って説明をするので文字列と表現します。

これだけです!
では実際に使ってみましょう!
例えばsample.txtというファイルに以下の内容が記述されているとします。
※東京23区をランダムに20個入れています。ない区もあれば重複している区もあります。

東京都足立区
東京都中央区
東京都新宿区
東京都北区
東京都荒川区
東京都江戸川区
東京都中野区
東京都杉並区
東京都練馬区
東京都葛飾区
東京都荒川区
東京都練馬区
東京都足立区
東京都江戸川区
東京都大田区
東京都台東区
東京都北区
東京都目黒区
東京都杉並区
東京都文京区

さて、突然ですが問題です。
1.この中に「渋谷区」は含まれているでしょうか?
2.この中に「練馬区」はいくつあるでしょうか?

・・・
・・・・・
はい!答えはわかりましたか?
たった20個とはいえ漢字だらけで探すのが大変ですよね。
ではGrepを使ってそれぞれの解答を見ていきます。
最初に渋谷区です。

grep '渋谷区' sample.txt
# 

何も表示されません。
そうです。この中に渋谷区は含まれていないんです。
では次に練馬区を見てみましょう。

grep '練馬区' sample.txt
# 東京都練馬区
# 東京都練馬区

お!2つ表示されました。
先程も伝えたとおり、Grepは指定した文字列と一致する文字列のある行を取得するコマンドでしたね。
つまり練馬区は2つ存在するということです。
ということで答えは

1.渋谷区は含まれていない
2.練馬区は2つある

となります。

「え?それだけ?」
と不満に思ったあなた!
ご安心ください。
Grepにはオプションが存在しており、オプションをつけることでグッと便利になるのです!!
基本的な使い方はわかったので次はオプションについて見ていきましょう!

Grepコマンドのオプション

先述したとおり、Grepには便利なオプションが存在します。
使い方は簡単で、

grep [オプション] <検索文字列> <検索対象ファイル名>

というふうに、grepの直後に記述するだけです。
では実際に便利なオプションをいくつか紹介していきます!

検索結果を行番号付きで表示する「-n」

上記のsample.txtをそのまま使います。
練馬区が2つ存在することはわかりました。
ただ、次に問題となるのが、「練馬区がどこにあるのか?」 です。
そこで「-n」オプションの登場です。
では早速使ってみましょう!

grep -n '練馬区' sample.txt
# 9:東京都練馬区
# 12:東京都練馬区

今度は左側に番号がついてます。
そうです、これが行番号です。意外と近くにありましたw
実際に確認してみると9行目と12行目に「東京都練馬区」があることがわかります。
どうですか?便利ですよね??
他にもいくつかオプションを紹介します。

一致した文字列の数を表示する「-c」

これはわかりやすいですね!検索した文字列と一致する数をカウントしてくれます。

grep -c '練馬区' sample.txt
# 2

これも使えそうですね!

完全一致した行を表示する「-x」

これは使う場面は限られそうですが、知っておいて損はないはずです。

grep -x '練馬区' sample.txt
#

「練馬区」だけでは完全一致ではないので表示されません。

grep -x '東京都練馬区' sample.txt
# 東京都練馬区
# 東京都練馬区

ちゃんと「東京都練馬区」といった具合にフルネームで指定する必要があります。

ちなみにオプションは2つ以上つけることができます。

grep -xc '東京都練馬区' sample.txt
# 2
grep -xn '東京都練馬区' sample.txt
# 9:東京都練馬区
# 12:東京都練馬区

といった感じです。
他にもオプションはたくさんあります。
今回のsample.txtでは説明できない便利なオプションもあるので興味があったり、
「これできないのかな?」と思ったら是非 「grep オプション」 で調べてみてください!

Grepは他のコマンドや処理と併用すると便利さが爆上がり?!

最後に、これは実践ではないのですが、Grepコマンドは単体でも大変便利で強力なコマンドです。
ですが他のコマンドや処理と併用することでその能力を120%発揮します。
例えば、
sedコマンドと組み合わせて特定の行のテキストの置き換えを行ったり、
awkコマンドと組み合わせて特定の行の特定テキストを含む行を抽出したり、
リダイレクションと組み合わせて特定の行を別のファイルにコピーしたり、、、
といった具合に様々な事ができます!!

まとめ

いかがでしたでしょうか?
Grepコマンド便利ですよね!
私はLinuxの学習過程でパスワードマネージャーを作成したのですが、
その時このGrepコマンドの便利さに大変助けられました!

この記事を読んだ方が、

  • 特定な文字列を検索したい
  • 特定な文字列を検索して何か処理を施したい

といった場合に、Grepコマンドを思い出すきっかけになれれば幸いです。

8
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?