]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - usr.bin/grep/zgrep.sh
Remove spurious newline
[FreeBSD/FreeBSD.git] / usr.bin / grep / zgrep.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2003 Thomas Klausner.
4 #
5 # Redistribution and use in source and binary forms, with or without
6 # modification, are permitted provided that the following conditions
7 # are met:
8 # 1. Redistributions of source code must retain the above copyright
9 #    notice, this list of conditions and the following disclaimer.
10 # 2. Redistributions in binary form must reproduce the above copyright
11 #    notice, this list of conditions and the following disclaimer in the
12 #    documentation and/or other materials provided with the distribution.
13 #
14 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 #
25 # $FreeBSD$
26
27 set -u
28 grep=grep
29 zcat=zstdcat
30
31 endofopts=0
32 pattern_found=0
33 grep_args=""
34 hyphen=0
35 silent=0
36
37 prg=${0##*/}
38
39 # handle being called 'zegrep' or 'zfgrep'
40 case ${prg} in
41 *egrep)
42         grep_args="-E";;
43 *fgrep)
44         grep_args="-F";;
45 esac
46
47 catargs="-f"
48 case ${prg} in
49 zstd*)
50         cattool="/usr/bin/zstdcat"
51         catargs="-fq"
52         ;;
53 bz*)
54         cattool="/usr/bin/bzcat"
55         ;;
56 z*)
57         cattool="/usr/bin/zcat"
58         ;;
59 xz*)
60         cattool="/usr/bin/xzcat"
61         ;;
62 lz*)
63         cattool="/usr/bin/lzcat"
64         ;;
65 *)
66         echo "Invalid command: ${prg}" >&2
67         exit 1
68         ;;
69 esac
70
71 # skip all options and pass them on to grep taking care of options
72 # with arguments, and if -e was supplied
73
74 while [ $# -gt 0 -a ${endofopts} -eq 0 ]
75 do
76     case $1 in
77     # from GNU grep-2.5.1 -- keep in sync!
78         -[ABCDXdefm])
79             if [ $# -lt 2 ]
80                 then
81                 echo "${prg}: missing argument for $1 flag" >&2
82                 exit 1
83             fi
84             case $1 in
85                 -e)
86                     pattern="$2"
87                     pattern_found=1
88                     shift 2
89                     break
90                     ;;
91                 *)
92                     ;;
93             esac
94             grep_args="${grep_args} $1 $2"
95             shift 2
96             ;;
97         --)
98             shift
99             endofopts=1
100             ;;
101         -)
102             hyphen=1
103             shift
104             ;;
105         -h)
106             silent=1
107             shift
108             ;;
109         -r|-R)
110             echo "${prg}: the ${1} flag is not currently supported" >&2
111             exit 1
112             ;;
113         -V|--version)
114             exec ${grep} -V
115             ;;
116         -*)
117             grep_args="${grep_args} $1"
118             shift
119             ;;
120         *)
121             # pattern to grep for
122             endofopts=1
123             ;;
124     esac
125 done
126
127 # if no -e option was found, take next argument as grep-pattern
128 if [ ${pattern_found} -lt 1 ]
129 then
130     if [ $# -ge 1 ]; then
131         pattern="$1"
132         shift
133     elif [ ${hyphen} -gt 0 ]; then
134         pattern="-"
135     else
136         echo "${prg}: missing pattern" >&2
137         exit 1
138     fi
139 fi
140
141 ret=0
142 # call grep ...
143 if [ $# -lt 1 ]
144 then
145     # ... on stdin
146     ${cattool} ${catargs} - | ${grep} ${grep_args} -- "${pattern}" - || ret=$?
147 else
148     # ... on all files given on the command line
149     if [ ${silent} -lt 1 -a $# -gt 1 ]; then
150         grep_args="-H ${grep_args}"
151     fi
152     for file; do
153         ${cattool} ${catargs} -- "${file}" |
154             ${grep} --label="${file}" ${grep_args} -- "${pattern}" - || ret=$?
155     done
156 fi
157
158 exit ${ret}