X-Git-Url: https://git.gag.com/?p=debian%2Fgzip;a=blobdiff_plain;f=zgrep.in;h=ae5a9d1ed8cd44ae81406d47fa8cbc45fe567f82;hp=d2beeab164f1206b4f0a897030465585a031ac99;hb=0d5a754ba8f2cc33e98d48d559f0ad6cd18a43a3;hpb=ad96056bdcf62abd585cdb53768fbabdde75d1b5 diff --git a/zgrep.in b/zgrep.in old mode 100755 new mode 100644 index d2beeab..ae5a9d1 --- a/zgrep.in +++ b/zgrep.in @@ -1,36 +1,49 @@ -: #!/bin/sh # zgrep -- a wrapper around a grep program that decompresses files as needed # Adapted from a version sent by Charles Levert -# Copyright (C) 1998, 2001, 2002 Free Software Foundation +# Copyright (C) 1998, 2001, 2002, 2006 Free Software Foundation # Copyright (C) 1993 Jean-loup Gailly # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. PATH="BINDIR:$PATH"; export PATH -prog=`echo $0 | sed 's|.*/||'` -case "$prog" in +case "$0" in *egrep) grep=${EGREP-egrep} ;; *fgrep) grep=${FGREP-fgrep} ;; *) grep=${GREP-grep} ;; esac +version="z$grep (gzip) @VERSION@ +Copyright (C) 2006 Free Software Foundation, Inc. +This is free software. You may redistribute copies of it under the terms of +the GNU General Public License . +There is NO WARRANTY, to the extent permitted by law. + +Written by Jean-loup Gailly." + +usage="Usage: z$grep [OPTION]... [-e] PATTERN [FILE]... +Look for instances of PATTERN in the input FILEs, using their +uncompressed contents if they are compressed. + +OPTIONs are the same as for '$grep'. + +Report bugs to ." + pat="" after_dash_dash="" files_with_matches=0 @@ -41,9 +54,11 @@ with_filename=0 while test $# -ne 0; do case "$after_dash_dash$1" in --d* | --rec*) echo >&2 "$0: $1: option not supported"; exit 2;; + --h*) echo "$usage" || exit 2; exit;; --files-with-*) files_with_matches=1;; --files-witho*) files_without_matches=1;; --no-f*) no_filename=1;; + --v*) echo "$version" || exit 2; exit;; --wi*) with_filename=1;; --*) ;; -*) @@ -81,8 +96,7 @@ while test $# -ne 0; do done if test -z "$pat"; then - echo "grep through gzip files" - echo "usage: $prog [grep_options] pattern [files]" + echo "$usage" exit 2 fi @@ -93,20 +107,45 @@ fi res=0 for i do - gzip -cdfq "$i" | + gzip -cdfq -- "$i" | if test $files_with_matches -eq 1; then - $grep $opt "$pat" > /dev/null && echo $i + $grep $opt "$pat" > /dev/null && printf '%s\n' "$i" elif test $files_without_matches -eq 1; then - $grep $opt "$pat" > /dev/null || echo $i + $grep $opt "$pat" > /dev/null || printf '%s\n' "$i" elif test $with_filename -eq 0 && { test $# -eq 1 || test $no_filename -eq 1; }; then $grep $opt "$pat" else + escaped= + while :; do + case $i in + *' +'*) + char=' +' repl='\\n';; + *'&'*) char='&' repl='\&';; + *'\'*) char='\\' repl='\\';; + *'|'*) char='|' repl='\|';; + *) break;; + esac + up_to_first_char="\\([^$char]*\\)" + after_first_char="[^$char]*$char\\(.*\\)" + escaped=$escaped`expr "X$i" : "X$up_to_first_char"`$repl + i=`expr "X$i" : "$after_first_char"` + done if test $with_filename -eq 1; then - sed_script="s|^[^:]*:|${i}:|" + sed_script="s|[^:]*|$escaped$i|" else - sed_script="s|^|${i}:|" + sed_script="s|^|$escaped$i:|" fi - $grep $opt "$pat" | sed "$sed_script" + + # Fail if either grep or sed fails. + # Bash has ${PIPESTATUS[0]}, but that's not portable. + exec 3>&1 + r=` + exec 4>&1 + ($grep $opt "$pat" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&- + ` && + exit $r fi r=$? test $res -lt $r && res=$r