howmの日本語grepにmgをつかっていたけど、freebsd-updateとかpkg upgradeしたらmgがうごかなくなってしまったので、lgrepをつかってみることにした。mgはメールのように構造をもったものを検索するのには威力を発揮するがhowmの場合はふつうの行マッチで足りるので問題ない。

lgrepには-rでディレクトリを再帰的にgrepする機能がないので定番のfind+xargsで。

#!/bin/sh

EMSG=""
while getopts "EiHnrf:F" flag; do
    case "$flag" in
    E) extended=yes ;;
    i) ignore=yes; LGOPTS="$LGOPTS -i" ;;
    H) filename=yes ;;
    n) lineno=yes; LGOPTS="$LGOPTS -n" ;;
    r) recursive=yes ;;
    f) regexp=$(cat "$OPTARG") ;;
    F) fixed=yes; LGOPTS="$LGOPTS -f" ;;
    *) EMSG="INVALID ARGUMENT: $0 $*" ;;
    esac
done
if [ -n "$EMSG" ]; then
    for X in "$@"; do
        case "$X" in
        /*) echo "$X/ERROR.howm:0: $EMSG"; exit 1 ;;
        esac
    done
    echo "$EMSG" >&2
    exit 1
fi
shift $((OPTIND - 1))


find "$@" -type f \( -name "*.howm" -o -name "*.txt" \) -print0 | 
    xargs -0 lgrep $LGOPTS "$regexp"

koie