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"