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"















