Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: something simple (I hope)



In the last episode (Aug 04), Andy Spiegl said:
> > > I want to put all files that match the regex pattern
> > >  "^/var/tmp/exec\.[0-9]+$"
> > > into a list that I can then use in a foreach loop.
> 
> > for i in /var/tmp/exec.[0-9][0-9]* ; do echo $i ; done
> Thanks but I really need a list (with a name).
> Actually in the meantime I found out how to do that:
>  files=(/var/tmp/exec.[[:digit:]]*)
> 
> But what is still bugging me is that this also matches files like
>  /var/tmp/exec.01234.something
> 
> I can't figure out how to tell zsh that there shouldn't be anything _after_
> digits.  What is the zsh-equivalent of a $ in regular expressions?

Your problem isn't the lack of "$" (glob patterns always anchor to the
start and end so ^ and $ operators are unneeded), it's your use of "*". 
"*" in a glob pattern means "match any character", and is equivalent to
the regex ".*" .

Try "/var/tmp/exec.<->".  <-> is the <x-y> numeric range operator with
no minimum or maximum number, so it matches any numeric value.  

The zsh equivalent to the regex "+" is "##", so you could also use
"/var/tmp/exec.[0-9]##" (make sure EXTENDED_GLOB is set).

-- 
	Dan Nelson
	dnelson@xxxxxxxxxxxxxxx



Messages sorted by: Reverse Date, Date, Thread, Author