0
0

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.

App::Greple チュートリアルAdvent Calendar 2021

Day 4

greple #4 複数キーワード検索 OR

Last updated at Posted at 2021-12-04

注意

この記事は Version 8 までに関するものです。Greple Version 9 から、--le オプション内での ? は、OR ではなくて MAY を表すように変更されました。Version 9 以降では、OR 条件を指定するためには正規表現を使ってください。その方が簡単だしわかりやすいので、そのように仕様変更しました。

複数キーワードによる検索 OR編

前回は、指定した複数のキーワードをすべて含む行を表示する方法について説明しました。今回は、A か B のどちらかが含まれればいいという条件を指定する方法について紹介します。

--le オプションの ? 指定

前回と同じ寿司セットの検索を考えます。

sushi.txt
サービスセット      熟成まぐろ えび たまご いか サーモン いなり ねぎまぐろ サラダ
お子様セット        熟成まぐろ えび たまご いなり ツナサラダ
特上セット          中とろ 熟成まぐろ 熟成真鯛 はまち 赤えび ほたて うなぎ かに いくら
特上極旨セット      中とろ はまち かに いくら 赤えび サーモン うなぎ うに
うどんセット        熟成まぐろ サーモン たまご えび うどん
サラダ軍艦セット    えびマヨ ツナサラダ サラダ シーフードサラダ
人気セット          熟成まぐろ 漬けまぐろ サーモン びんちょう いか えび えびアボカド たまご
まぐろづくしセット  中とろ 熟成まぐろ ねぎまぐろ
プレミアムセット    中とろ まぐろ サーモン 赤えび はまち うなぎ かに いくら

前回はまぐろはまちの両方を含むセットを探しましたが、はまちが入っているセットは少ないので選択肢が限られます。妥協して、代わりにえびでもいいことにしましょう。

このような場合は、次のようにキーワードの先頭に ? マークを指定します。

greple -n 'まぐろ ?はまち ?えび' sushi.txt

image.png

だいぶ選択肢が増えました。

複数の --le オプションを使う

選択肢が増えて気が大きくなってきたので、上の条件に加えて、うにいくらも食べたくなりました。

greple -n 'まぐろ ?はまち ?えび ?うに ?いくら' sushi.txt

image.png

こうすると、はまち、えび、うに、いくら、のどれかが入っていればいいということになってしまって、期待した結果が得られません。

このような場合は --le を複数回指定します。

greple -n --le 'まぐろ ?はまち ?えび' --le '?うに ?いくら' sushi.txt

image.png

OR キーワードは、それぞれの --le オプション内でグループ化され、オプション同士は AND で評価されるため、全体としては次のような意味になります。

まぐろ AND (はまち OR えび) AND (うに OR いくら)

結果は、それぞれの検索条件毎に色分けされて、見やすく表示されています。

上の例で、最初の --le を省略することはできません。greple は、パターンオプションが指定されていない時のみ、最初の引数をパターンと解釈するので、この --le を省略すると次の引数はファイル名として扱われてしまいます。

正規表現を使う

上の例は、正規表現の | 記法を使って次のように書いても、まったく同じ意味になります。実は ? 記号がついたキーワードについては、内部的にこのような表現に変換して評価しています。

greple -n --le 'まぐろ はまち|えび' --le 'うに|いくら' sushi.txt

image.png

さらには、この例では ? を使っていないので --le オプションは1つにまとめてしまっても問題ないし、その場合は省略することもできます。

greple -n 'まぐろ はまち|えび うに|いくら' sushi.txt

image.png

慣れている人には、この方がわかりやすいかもしれません。

まとめ

--le オプションに複数キーワードを指定する際に、OR 条件を指定する方法を紹介しました。

grep を使って同じことをやろうとすれば、やはりパイプを使うことになると思います。

grep -n まぐろ sushi.txt | egrep 'はまち|えび' | egrep 'うに|いくら

image.png

このくらいになってくると、少し greple を使うメリットが感じられてくるでしょうか。条件が複雑になってくると、条件毎に色分けしてくれるのがありがたく感じられる局面も増えてきます。

SEE ALSO

  1. https://qiita.com/kaz-utashiro/items/5b6bcbe54891b3bd9db5
  2. https://qiita.com/kaz-utashiro/items/eb8c7067e6de34842fe3
  3. https://qiita.com/kaz-utashiro/items/165e744d4250adedc4c1
  4. https://qiita.com/kaz-utashiro/items/439e6abcecf36c520703 ←イマココ
  5. https://qiita.com/kaz-utashiro/items/24ac0b8fdd30b598e069
  6. https://qiita.com/kaz-utashiro/items/a1ba4e3d07cf37dc25e3
  7. https://qiita.com/kaz-utashiro/items/0c8c944c17a72724b771
  8. https://qiita.com/kaz-utashiro/items/8783c2fd0cc4315b9a3d
  9. https://qiita.com/kaz-utashiro/items/84f5a6be6bf996076c64
  10. https://qiita.com/kaz-utashiro/items/ebc7ea99f800cfc8c90c
  11. https://qiita.com/kaz-utashiro/items/25a14e75380c39b5e0af
  12. https://qiita.com/kaz-utashiro/items/ebbeb8a5538a15ff04fc
  13. https://qiita.com/kaz-utashiro/items/b265deef9c9b1953a414
  14. https://qiita.com/kaz-utashiro/items/2b20e0226cffde213ce0
  15. https://qiita.com/kaz-utashiro/items/16b5142ef7a89aa35380
  16. https://qiita.com/kaz-utashiro/items/d19fe5ee859f31ce172c
  17. https://qiita.com/kaz-utashiro/items/09a5f5cf08ce314e2add
  18. https://qiita.com/kaz-utashiro/items/6e4b1f51455e587ef743
0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?