File: bz3grep

package info (click to toggle)
bzip3 1.5.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,652 kB
  • sloc: ansic: 6,893; sh: 218; makefile: 82
file content (129 lines) | stat: -rw-r--r-- 3,721 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env 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.
#
# Adapted for bz3cat.

grep=${GREP:-grep}
zcat=${ZCAT:-bz3cat}

endofopts=0
pattern_found=0
grep_args=""
hyphen=0
silent=0

prog=bz3grep

# 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}"