Date: Wed, 27 Jun 2012 10:25:28 -0500 From: Tim Daneliuk <tundra@tundraware.com> To: Aleksandr Miroslav <alexmiroslav@gmail.com> Cc: freebsd-questions@freebsd.org Subject: Re: shell scripting: grepping multiple patterns, logically ANDed Message-ID: <4FEB25E8.6000701@tundraware.com> In-Reply-To: <CACcSE1zwRcU_VQ16A2wiG4yWk4RBRykTXBono3xspw97zhDs7w@mail.gmail.com> References: <CACcSE1zwRcU_VQ16A2wiG4yWk4RBRykTXBono3xspw97zhDs7w@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 06/27/2012 09:25 AM, Aleksandr Miroslav wrote: > hello, > > I'm not sure if this is the right forum for this question, but here > goes. > > I have the following in a shell script: > > > #!/bin/sh > > if [ "$#" -eq "0" ]; then > find /foo > fi > if [ "$#" -eq "1" ]; then > find /foo | grep -i $1 > fi > if [ "$#" -eq "2" ]; then > find /foo | grep -i $1 | grep -i $2 > fi > if [ "$#" -eq "3" ]; then > find /foo | grep -i $1 | grep -i $2 | grep -i $3 > fi > > Is there an easier/shorter way to do this? If there are 15 arguments > supplied on the command line, I don't necessarily want to build 15 if > statements. > > Thanks in advance for your answers. The following solution relies on the fact that you can include multiple patterns for grep to match with the '-e' argument: #!/bin/sh PATTERNS=`echo " $*" | sed s/\ /\ -e\ /g` find /foo | grep $PATTERNS Notice that when constructing the $PATTERNS string out of the command line args, you have to quote them with a prepended space character. That's because the subsequent 'sed' substitution needs to find a space *before* each argument which it then replaces with "-e ". ----------------------------------------------------------------------- Tim Daneliuk
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FEB25E8.6000701>