On 22 May 2014 14:12, <li...@sbt.net.au> wrote:

> On Wed, May 21, 2014 12:28 pm, pe...@chubb.wattle.id.au wrote:
>
> > As you're not using regular expressions, but just strings, fgrep is
> > the way to do it. fgrep -q '07/2014 15/06/2014
> > 20/06/2014
> > 25/06/2014' part 2 && exit 0
>
> Peter, thanks
>
> Amos, you've per-emptied my next Q, thanks
>

Glad I did :)


>
> I actually should move it totally out of script, as this list will often
> change, so (I think?) I can enter dates into a file, say 'patterns'
>
> and, use like
>
> fgrep -q -f /path/to/pattern part2 && exit 0
>

Yes this will work. One pattern per line. See "man grep". No need to quote
or anything since it's not parsed through the shell.


>
> ?
>
> will I need any quotes in file 'pattern', or simply like:
>
> 07/2014
> 15/06/2014
> 20/06/2014
> 25/06/2014
>
> thanks again
>
> V
>
>
> On Wed, May 21, 2014 7:24 pm, Amos Shapira wrote:
> > It might be more maintainable to keep the list of patterns in a variable
> > (line per pattern) then pass it to grep using grep's -f/--file= argument:
> >
> >
> > PATTERNS="15/06/2014
> > 20/06/2014
> > 25/06/2014"
> >
> >
> > ...
> > grep -q -f <(echo "$PATTERNS") file2 && exit 0
> >
> > Note the use of double quotes around the variable interpolation in the
> > grep command line, they are essential to preserve the newlines in the
> > variable's value.
> >
> > The (bash specific, I think) trick here if the use of "<(command)" which
> > causes bash to open a pipe to the command and pass its name as
> > /dev/fd/FILE-DESC-NUMBER to grep so grep thinks it's a regular file to
> > read match patterns from while its stdin is still free to read the input
> > to match against the patterns. If grep doesn't read its input from stdin
> > but from a regular file then you don't need this trick and can just pass
> > "-f -"
> > to make grep read the patterns from stdin and the matching text from the
> > regular file:
> >
> > grep -q -f - file2 && exit 0 <<<"$PATTERNS"
> >
> > (actually this uses another bash specific trick, you can do the following
> >  to get rid of bash'ism completely:
> >
> > echo "$PATTERN" | grep -q -f files && exit 0 )
>
>
> --
> SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
> Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html
>



-- 
 [image: View my profile on LinkedIn]
<http://www.linkedin.com/in/gliderflyer>
-- 
SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html

Reply via email to