2026/07/14(火) [n年前の日記]
#1 [prog] Windows用grep.exeの罠
これって数日前にメモしてたかな…。忘れた…。とりあえずメモしておくか…。
Windows11 x64 25H2上で、grep (grep.exe) のヘルプ(--help)やバージョン確認(--version)をしようとしてハマった。-h や --help や --version を打っても、何も出てこない。おかしい。
自分の環境では以下の版を D:\home2\bin\ 以下に置いてあって、それが呼び出されるものと思っていたのだけど…。
_Grep for Windows
where で確認したら妙なことになってた。
Embarcadero云々のほうが先に呼ばれている…。Embarcadero というと、Delphi かな? Delphi にも grep.exe が添付されていて、そちらが先に呼ばれている?
Windows11 x64 25H2上で、grep (grep.exe) のヘルプ(--help)やバージョン確認(--version)をしようとしてハマった。-h や --help や --version を打っても、何も出てこない。おかしい。
> grep -h Error: No file sets specified > grep --help Error: No file sets specified > grep --version Error: No file sets specified
自分の環境では以下の版を D:\home2\bin\ 以下に置いてあって、それが呼び出されるものと思っていたのだけど…。
_Grep for Windows
where で確認したら妙なことになってた。
> where grep D:\Program Files (x86)\Embarcadero\Studio\23.0\bin\grep.exe D:\home2\bin\grep.exe
Embarcadero云々のほうが先に呼ばれている…。Embarcadero というと、Delphi かな? Delphi にも grep.exe が添付されていて、そちらが先に呼ばれている?
◎ Turbo grep なるものがあるらしい :
AI (Google Gemini)に尋ねてみたら、「それは Turbo GREP じゃないか? だったら grep ? でヘルプ表示が出るかも」と言ってきた。
試してみた。
マジだ。Turbo GREP 5.6 が呼び出されてしまっていたのか。
試してみた。
> grep ?
Turbo GREP 5.6 Copyright (c) 1992-2010 Embarcadero Technologies, Inc.
Syntax: GREP [-rlcnvidzewoqhu] searchstring file[s] or @filelist
Options are one or more option characters preceded by "-", and optionally
followed by "+" (turn option on), or "-" (turn it off). The default is "+".
-r+ Regular expression search -l- File names only
-c- match Count only -n- Line numbers
-v- Non-matching lines only -i- Ignore case
-d- Search subdirectories -z- Verbose
-e Next argument is searchstring -w- Word search
-o- UNIX output format Default set: [0-9A-Z_]
-q- Quiet: supress normal output
-h- Supress display of filename
-u xxx Create a copy of grep named 'xxx' with current options set as default
A regular expression is one or more occurrences of: One or more characters
optionally enclosed in quotes. The following symbols are treated specially:
^ start of line $ end of line
. any character \ quote next character
* match zero or more + match one or more
[aeiou0-9] match a, e, i, o, u, and 0 thru 9 ;
[^aeiou0-9] match anything but a, e, i, o, u, and 0 thru 9
マジだ。Turbo GREP 5.6 が呼び出されてしまっていたのか。
◎ OR検索の謎 :
AI曰く、「Turbo GREP なら OR検索は使えないはず」とのこと。
妙だな…。以下でも動いてるように見えるけど…。
色々試してたら、そもそも Turbo GREP 5.6 なら、-E をつけなくてもOR検索できるように見えた。
Turbo GREP のヘルプ表示では、-r をつければ正規表現で指定できると書いてあったのでそれも試してみたけれど、その場合も動いてるように見える…。どうなってるんだ…?
以下のテキストファイルを作成して、Turbo GREP版でOR検索を試してみた。
やはりOR検索が動いちゃってるように見える…。いや、動かないよりは動いたほうがいいんだけど。内部的には機能追加されてるけれど、ヘルプ表示だけが古いまま、ということなのかな…。
環境変数PATHの順番で、D:\home2\bin\ のほうを先に登録してそちらが呼ばれるようにしたいけれど、それをしてしまうと Delphi を動かした時に不具合が出そうで…。どうしたものか…。
妙だな…。以下でも動いてるように見えるけど…。
> py -m pip list | grep -E "opencv|numpy" numpy 2.2.6 opencv-contrib-python 5.0.0.93 opencv-python 5.0.0.93 opencv-python-headless 5.0.0.93
色々試してたら、そもそも Turbo GREP 5.6 なら、-E をつけなくてもOR検索できるように見えた。
> py -m pip list | grep "opencv|numpy" numpy 2.2.6 opencv-contrib-python 5.0.0.93 opencv-python 5.0.0.93 opencv-python-headless 5.0.0.93
Turbo GREP のヘルプ表示では、-r をつければ正規表現で指定できると書いてあったのでそれも試してみたけれど、その場合も動いてるように見える…。どうなってるんだ…?
以下のテキストファイルを作成して、Turbo GREP版でOR検索を試してみた。
hoge fuga piyo hoge|fuga
> "D:\Program Files (x86)\Embarcadero\Studio\23.0\bin\grep.exe" "hoge|fuga" test.txt test.txt hoge fuga hoge|fuga
やはりOR検索が動いちゃってるように見える…。いや、動かないよりは動いたほうがいいんだけど。内部的には機能追加されてるけれど、ヘルプ表示だけが古いまま、ということなのかな…。
環境変数PATHの順番で、D:\home2\bin\ のほうを先に登録してそちらが呼ばれるようにしたいけれど、それをしてしまうと Delphi を動かした時に不具合が出そうで…。どうしたものか…。
◎ 2026/07/15追記 :
GNU版の grep.exe をリネームコピーして gnugrep.exe にしておいた。自分の環境では gnugrep と打てば GNU版 grep を利用できる、とメモしておく。もっとも自分のことだから明日には忘れてそう…。
Rust で書き直されて爆速になったという、ripgrep (rg.exe) を使うように心掛けたほうがいいのかもしれない…。
あるいは egrep.exe を ―― 指定した検索パターンを拡張正規表現として扱う grep を利用することにするとか…。
Rust で書き直されて爆速になったという、ripgrep (rg.exe) を使うように心掛けたほうがいいのかもしれない…。
あるいは egrep.exe を ―― 指定した検索パターンを拡張正規表現として扱う grep を利用することにするとか…。
[ ツッコむ ]
以上、1 日分です。