X-Git-Url: https://git.cworth.org/git?p=gzip;a=blobdiff_plain;f=zgrep.in;h=1046ecc5a0ab9c8554085c9601eadda766d57451;hp=cac4863f4270881138aa3c2a599dd884246172ac;hb=e7921f54c622e3b32e525f345bc34308821e4ae0;hpb=c9eb602f6f5c10a521e7274640033f6a35deca1d diff --git a/zgrep.in b/zgrep.in old mode 100755 new mode 100644 index cac4863..1046ecc --- a/zgrep.in +++ b/zgrep.in @@ -1,26 +1,24 @@ -: #!/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 @@ -31,6 +29,22 @@ case "$prog" in *) 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 +55,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 +97,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 @@ -95,35 +110,42 @@ res=0 for i do gzip -cdfq -- "$i" | if test $files_with_matches -eq 1; then - $grep $opt "$pat" > /dev/null && printf "%s\n" "$i" + $grep $opt "$pat" > /dev/null && printf '%s\n' "$i" elif test $files_without_matches -eq 1; then - $grep $opt "$pat" > /dev/null || printf "%s\n" "$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 - i=$(echo "$i" | sed -e 's/[\\|&]/\\&/g') + 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 - # Hack adapted from GPLed code at - # http://home.comcast.net/~j.p.h/cus-faq-2 - # Has the same effect as the following two lines of bash: - # - # $grep $opt "$pat" | sed "$sed_script" - # exit ${PIPESTATUS[0]} - # - # Inside the `...`, fd4 goes to the pipe whose other end is read - # and passed to eval; fd1 is the normal standard output - # preserved the line before with exec 3>&1 + + # Fail if either grep or sed fails. + # Bash has ${PIPESTATUS[0]}, but that's not portable. exec 3>&1 - eval ` - exec 4>&1 >&3 3>&- - { - $grep $opt "$pat" 4>&-; echo "r=$?;" >&4 - } | sed "$sed_script" - ` + r=` + exec 4>&1 + ($grep $opt "$pat" 4>&-; echo $? >&4) 3>&- | sed "$sed_script" >&3 4>&- + ` && exit $r fi r=$?