grep=${GREP:-grep}
zcat=${ZCAT:-zstdcat}
endofopts=0
pattern_found=0
grep_args=""
hyphen=0
silent=0
prog=${0##*/}
case $prog in
*egrep*) prog=zegrep; grep_args='-E';;
*fgrep*) prog=zfgrep; grep_args='-F';;
*) prog=zstdgrep;;
esac
while [ "$#" -gt 0 ] && [ "${endofopts}" -eq 0 ]; do
case "$1" in
-[ABCDXdefm])
if [ "$#" -lt 2 ]; then
printf '%s: missing argument for %s flag\n' "${prog}" "$1" >&2
exit 1
fi
case "$1" in
-e)
pattern="$2"
pattern_found=1
shift 2
break
;;
-f)
pattern_found=2
;;
*)
;;
esac
grep_args="${grep_args} $1 $2"
shift 2
;;
--)
shift
endofopts=1
;;
-)
hyphen=1
shift
;;
-h)
silent=1
shift
;;
-*)
grep_args="${grep_args} $1"
shift
;;
*)
endofopts=1
;;
esac
done
if [ "${pattern_found}" -lt 1 ]; then
if [ "$#" -ge 1 ]; then
pattern="$1"
shift
elif [ "${hyphen}" -gt 0 ]; then
pattern="-"
else
printf '%s: missing pattern\n' "${prog}" >&2
exit 1
fi
fi
EXIT_CODE=0
if [ "$#" -lt 1 ]; then
set -f "${zcat}" - | "${grep}" ${grep_args} -- "${pattern}" -
EXIT_CODE=$?
set +f
else
if [ "${silent}" -lt 1 ] && [ "$#" -gt 1 ]; then
grep_args="-H ${grep_args}"
fi
set -f
while [ "$#" -gt 0 ]; do
if [ $pattern_found -eq 2 ]; then
"${zcat}" -- "$1" | "${grep}" --label="${1}" ${grep_args} -- -
else
"${zcat}" -- "$1" | "${grep}" --label="${1}" ${grep_args} -- "${pattern}" -
fi
[ "$?" -ne 0 ] && EXIT_CODE=1
shift
done
set +f
fi
exit "${EXIT_CODE}"