Linux シェル上でgrepコマンドを使ってOR条件検索する

2023-03-27Bash

はじめに

Linux のシェル操作用シェルスクリプト上で grep コマンドを使って検索することはよくあります。
多くの場合は grep コマンドでキーワードをひとつだけ指定して検索しますが、検索キーワードを複数指定し OR 条件検索をしたい場合はどのようにするのでしょうか?

OR 条件検索する方法はいくつかあるためご紹介いたします。

検証環境

$ uname -moi
x86_64 x86_64 GNU/Linux

$ bash -version | head -n 1
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)

動作確認を行うため簡単なテキストファイルを用意

動作を確認するため、grep コマンドで絞り込みを行う対象となるテキストファイルを用意します。
どんなデータでも良いのですが動物の名前でも列挙しておくことにします。

テキストファイルはこの先の説明で利用します。

$ cat <<EOF >animals.txt
dog
rabbit
cow
horse
wolf
kangaroo
fox
giraffe
EOF

$ ls -l animals.txt
-rw-r--r-- 1 root root 47 Mar  3 11:18 animals.txt

方法 1. -e オプションを指定する

-e <キーワード> オプションを使い、キーワードを複数指定して OR 条件検索 を行うことが可能です。
-e オプションは複数指定可能です。

ここでは、 rabbithorsewolf の 3 つを検索してみます。

grep コマンドの使い方を 3 つ取り上げていますが、どの方法を選んでも結果は一緒です。

# Pattern1
$ grep -e rabbit -e horse -e wolf animals.txt
rabbit
horse
wolf

# Pattern2
$ cat animals.txt | grep -e rabbit -e horse -e wolf
rabbit
horse
wolf

# Pattern3
$ grep -e rabbit -e horse -e wolf <animals.txt
rabbit
horse
wolf

方法 2. -f オプションを指定する

-f オプションを指定して、 検索キーワードが列挙されたファイル を使って絞り込むことができます。

検索キーワードが列挙されたファイル にはキーワードを改行区切りで複数指定することが可能です。
それぞれの検索キーワードは OR 条件 としてされます。

# まずは検索キーワードが列挙されたファイルを作成する
$ cat <<EOF >keywords.txt
rabbit
horse
wolf
EOF

# Pattern1
$ grep -f keywords.txt animals.txt
rabbit
horse
wolf

# Pattern2
$ cat animals.txt | grep -f keywords.txt
rabbit
horse
wolf

# Pattern3
$ grep -f keywords.txt <animals.txt
rabbit
horse
wolf

ひとこと

いずれの方法でも可能ですが、検索キーワードがそれほど多くない場合には -e オプションで指定する方が多いです。

2023-03-27Bash