1cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project#!/bin/sh 2cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 3cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project# Bzgrep wrapped for bzip2, 4cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project# adapted from zgrep by Philippe Troin <phil@fifi.org> for Debian GNU/Linux. 5cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project## zgrep notice: 6cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project## zgrep -- a wrapper around a grep program that decompresses files as needed 7cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project## Adapted from a version sent by Charles Levert <charles@comm.polymtl.ca> 8cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 9cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source ProjectPATH="/usr/bin:$PATH"; export PATH 10cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 11cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectprog=`echo $0 | sed 's|.*/||'` 12cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectcase "$prog" in 13cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project *egrep) grep=${EGREP-egrep} ;; 14cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project *fgrep) grep=${FGREP-fgrep} ;; 15cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project *) grep=${GREP-grep} ;; 16cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectesac 17cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectpat="" 18cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectwhile test $# -ne 0; do 19cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project case "$1" in 20cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project -e | -f) opt="$opt $1"; shift; pat="$1" 21cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project if test "$grep" = grep; then # grep is buggy with -e on SVR4 22cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project grep=egrep 23cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project fi;; 24cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project -A | -B) opt="$opt $1 $2"; shift;; 25cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project -*) opt="$opt $1";; 26cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project *) if test -z "$pat"; then 27cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project pat="$1" 28cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project else 29cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project break; 30cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project fi;; 31cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project esac 32cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project shift 33cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectdone 34cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 35cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectif test -z "$pat"; then 36cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project echo "grep through bzip2 files" 37cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project echo "usage: $prog [grep_options] pattern [files]" 38cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project exit 1 39cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectfi 40cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 41cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectlist=0 42cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectsilent=0 43cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectop=`echo "$opt" | sed -e 's/ //g' -e 's/-//g'` 44cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectcase "$op" in 45cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project *l*) list=1 46cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectesac 47cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectcase "$op" in 48cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project *h*) silent=1 49cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectesac 50cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 51cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectif test $# -eq 0; then 52cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project bzip2 -cdfq | $grep $opt "$pat" 53cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project exit $? 54cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectfi 55cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project 56cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectres=0 57cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectfor i do 58cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project if test -f "$i"; then :; else if test -f "$i.bz2"; then i="$i.bz2"; fi; fi 59cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project if test $list -eq 1; then 60cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project bzip2 -cdfq "$i" | $grep $opt "$pat" 2>&1 > /dev/null && echo $i 61cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project r=$? 62cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project elif test $# -eq 1 -o $silent -eq 1; then 63cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project bzip2 -cdfq "$i" | $grep $opt "$pat" 64cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project r=$? 65cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project else 66cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project j=${i//\\/\\\\} 67cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project j=${j//|/\\|} 68cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project j=${j//&/\\&} 69cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project j=`printf "%s" "$j" | tr '\n' ' '` 70cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project bzip2 -cdfq "$i" | $grep $opt "$pat" | sed "s|^|${j}:|" 71cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project r=$? 72cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project fi 73cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Project test "$r" -ne 0 && res="$r" 74cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectdone 75cfb3b2780016b4e9ab4849e22d9c3acbaf535248The Android Open Source Projectexit $res 76