mieki256's diary



2026/07/14(火) [n年前の日記]

#1 [prog] Windows用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 ? でヘルプ表示が出るかも」と言ってきた。

試してみた。

> 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検索は使えないはず」とのこと。

妙だな…。以下でも動いてるように見えるけど…。

> 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 を利用することにするとか…。

以上、1 日分です。

過去ログ表示

Prev - 2026/07 -
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project