123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- #!/bin/sh
- #
- # Copyright (c) 2003 Thomas Klausner.
- #
- # Redistribution and use in source and binary forms, with or without
- # modification, are permitted provided that the following conditions
- # are met:
- # 1. Redistributions of source code must retain the above copyright
- # notice, this list of conditions and the following disclaimer.
- # 2. Redistributions in binary form must reproduce the above copyright
- # notice, this list of conditions and the following disclaimer in the
- # documentation and/or other materials provided with the distribution.
- #
- # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- grep=${GREP:-grep}
- zcat=${ZCAT:-zstdcat}
- endofopts=0
- pattern_found=0
- grep_args=""
- hyphen=0
- silent=0
- prog=${0##*/}
- # handle being called 'zegrep' or 'zfgrep'
- case $prog in
- *egrep*) prog=zegrep; grep_args='-E';;
- *fgrep*) prog=zfgrep; grep_args='-F';;
- *) prog=zstdgrep;;
- esac
- # skip all options and pass them on to grep taking care of options
- # with arguments, and if -e was supplied
- while [ "$#" -gt 0 ] && [ "${endofopts}" -eq 0 ]; do
- case "$1" in
- # from GNU grep-2.5.1 -- keep in sync!
- -[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
- ;;
- *)
- # pattern to grep for
- endofopts=1
- ;;
- esac
- done
- # if no -e option was found, take next argument as grep-pattern
- 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
- # call grep ...
- if [ "$#" -lt 1 ]; then
- # ... on stdin
- set -f # Disable file name generation (globbing).
- # shellcheck disable=SC2086
- "${zcat}" - | "${grep}" ${grep_args} -- "${pattern}" -
- EXIT_CODE=$?
- set +f
- else
- # ... on all files given on the command line
- if [ "${silent}" -lt 1 ] && [ "$#" -gt 1 ]; then
- grep_args="-H ${grep_args}"
- fi
- set -f
- while [ "$#" -gt 0 ]; do
- # shellcheck disable=SC2086
- 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}"
|