greple #2 単純な検索

[greple ]: https://qiita.com/advent-calendar/2021/greple


# 単純な検索

greple の最も単純な使い方は grep と同じです。

    greple pattern file

ファイルが指定されなければ、標準入力を対象にします。

grep と共通のオプションもあります。以下に挙げたものは、grep とほぼ同様の意味を持ちますが、挙動が若干違うものもあります。

- `-n` 行番号を表示する
- `-i`: 大文字小文字を無視する
- `-A`, `-B`, `-C`: 前後の行を表示する
- `-o`: マッチした部分だけを表示する
- `-h`, `-H`: ファイル名の表示を制御する
- `-l`: マッチしたファイル名のみを表示する
- `-c`: マッチした数を表示する
- `-m`: 表示数を制御する

# 正規表現

greple は、特別なオプションを指定しなくても、パターンに Perl の正規表現をそのまま使うことができます。どのバージョンの正規表現が使えるかは、実行する処理系に依存します。

正規表現は、行単位ではなくファイル全体を対象としてマッチしますが、デフォルトで複数行マッチが有効になっていて、行頭・行末を示す `^`・`$` はすべての行にマッチします。

Perl 発祥の正規表現は PCRE (Perl Compatible Regular Expression) として、様々な言語やツールに組み込まれています。ripgrep の場合は、--pcre2 オプションをつけることで利用可能です。

# 実行例

次のようなファイルを用意してみました。某寿司チェーンのメニューを参考に少しアレンジしましたが、この程度ならまさか盗用とは言われないでしょう。このファイルに対して greple コマンドを実行してみます。

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

cat -n するとこうです。

![スクリーンショット 2021-12-02 17.56.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/13af3c2c-d892-010a-f7a4-4d4435def5f6.png)

### greple

行番号を表示する -n オプションをつけて greple を実行してみます。

![スクリーンショット 2021-12-02 17.59.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/f151a6ce-28bb-d728-7285-2499f756f674.png)

greple は、このように、デフォルトで検索した文字列を色付きでハイライトして表示します。最近の検索系コマンドは大概カラー出力に対応しているので珍しくはありません。

### grep

grep は、--color オプションをつけることでカラー出力ができます。

![スクリーンショット 2021-12-02 18.02.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/821fb8cb-7cc7-0a9d-dca4-27e4d3264611.png)

### ripgrep

ripgrep は、デフォルトでハイライト出力します。行番号やファイル名には異なる色がつきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/c48860a7-6b0c-259e-3d6f-b0fa67bfdaaf.png)

## 端末以外への出力

これらのコマンドは、出力が端末でない場合には、色付き出力の機能を無効にします。パイプにも着色して出力するためには `--color=always` オプションを指定します。`--color` オプションの仕様は、どのコマンドもほぼ共通で、値として `never`, `auto`, `always` を取ります。ただ、grep はデフォルトが `never`、greple と ripgrep は `auto` という違いがあります。

実際のところ、現代の使い方では常にカラー出力を有効にしていた方が便利です。greple で、そのように設定するためには、`~/.greplerc` に次のように書いておきます。

```~/.greplerc
option default --color=always
```

カラー出力を less で見たい時には、次のように環境変数を指定します。LESSANSIENDCHARS は、通常は `m` だけですが、greple は K で終わる行消去のシークエンスを使っているので、このようにしないと出力が壊れることがあります。grep も同様なので、こうしておいて損はありません。

```~/.profile
export LESS="-cR"
export LESSANSIENDCHARS="mK"
```

## まとめ

単純な文字列を指定した検索について説明しました。もっとも、このような使い方であれば greple を使う必要はまったくないので別のツールを使った方がいいでしょう。実行速度に関しては、インタプリタ型の greple はかなり不利ですが、一般的な使い方であれば実用上問題になるようなことはありません。

## SEE ALSO

https://qiita.com/advent-calendar/2021/greple

1. https://qiita.com/kaz-utashiro/items/5b6bcbe54891b3bd9db5

- https://github.com/kaz-utashiro/greple
- https://metacpan.org/dist/App-Greple
## SEE ALSO

https://qiita.com/advent-calendar/2021/greple

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

- https://github.com/kaz-utashiro/greple
- https://metacpan.org/dist/App-Greple