プログラマ行進曲第二章

主にソフトウェア関連の技術をネタにした記事を執筆するためのブログ

grepコマンドのパターン文字列がハイフンで始まっているとハマるという話

仕事でgrepコマンドを使っていたときにハマってしまったことについて記録を残しておきます。といってもほぼ人の記事の引用になってしまいますが。

タイトルの通りの話なのですが、grepコマンドを使っているときに文法は間違っていないはずなのにエラーになってしまって、エラー原因をググっていたところ、同じ現象に見舞われていた人を見つけました。以下引用。

$ env LANG=C grep '-misc-fixed-medium-r-normal--14-' /usr/X11R6/lib/X11/fonts/TrueType/fonts.alias
grep: invalid max count
$ grep '-misc-fixed-medium-r-normal--14-' /usr/X11R6/lib/X11/fonts/TrueType/fonts.alias
grep: 一致回数が間違っています

grep はパターン文字列を '' で囲った場合でも、それがハイフンで始まっているとオプション指定だと思うらしい。この場合、最初の '-m' がオプション -m (--max-count=n) と勘違いされているらしい。オプション -m は man grep には載っておらず、 grep --help を見て初めて分かるものなので気付きにくい。

解決策としては、最初のハイフンを消すか、オプション -e を用いる。

根本的な解決を探す必要は無かったので対処療法として私も -e オプションを用いることで問題を回避しました。

本来なら根本原因を追っていってみた方が勉強にもなっていいとは思うんですが、余裕がなかったのでそのまま放置しています。