greple --strict オプション

先日の変更で、greple コマンドに --strict オプションが付いている。実際には、デフォルトの挙動を変更して、以前と同じ動作をさせるために strict モードを追加したことになる。

何がどう変わったか。greple には --inside, --outside, --block などのマッチする領域を制限するオプションがあるが、以前は指定したパターンが完全にこれらの領域に含まれている時だけマッチが成功した。現在は、パターンの一部でも領域に含まれていればマッチが成功するようになっている。

たとえば、

greple --inside and command

というパターンは、以前は決してマッチしなかったが、今はする。--outside にしても結果は同じだ。

これが役に立つケースというのをあまり思いつかないのではあるが、たとえば

greple -n --block='(.*\n){1,10}' -e 'Be aware' README.md

みたいに、10行ずつのブロックを検索した時に、パターンが複数ブロックにまたがっている場合でも発見することができる。 以前は、1つのマッチは1つのブロックにしか影響を与えることができなかったのだが、それが複数ブロックになったということだ。

固定長のレコードデータなんかは、隣のレコードと一緒になってマッチしては困るだろうから --strict オプションを使った方がいいだろう

greple --strict --block='(?s).{80}' ...