shell scripting: grepping multiple patterns, logically ANDed
Tim Daneliuk
tundra at tundraware.com
Wed Jun 27 15:40:05 UTC 2012
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
More information about the freebsd-questions
mailing list