Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Oct 2005 12:34:53 -0700
From:      Drew Tomlinson <drew@mykitchentable.net>
To:        Will Maier <willmaier@ml1.net>
Cc:        freebsd-questions@freebsd.org
Subject:   Re: Bash Pattern Matching Syntax
Message-ID:  <4353FCDD.2040406@mykitchentable.net>
In-Reply-To: <20051015230706.GI3253@localdomain>
References:  <43518497.6050505@mykitchentable.net> <20051015230706.GI3253@localdomain>

next in thread | previous in thread | raw e-mail | index | archive | help
On 10/15/2005 4:07 PM Will Maier wrote:

>On Sat, Oct 15, 2005 at 03:37:11PM -0700, Drew Tomlinson wrote:
>  
>
>>I want to list the files in a directory that end in ".jpg"
>>irregardless of case.  Thus after reading the bash man page, it
>>seems I should be able to issue a command something along the
>>lines of "ls [*.[JjPpGg]]"  or "ls *.[JjPpGg]" but neither of
>>these work and return a "No such file or directory" message.  I've
>>also tried various ways of  escaping the '*' and '." but that
>>didn't help either.  However "ls *[JjPpGg]" does work by listing
>>the files.  However I want to match the "." before "jpg" as well.
>>What is the correct syntax for what I'm trying to do?
>>    
>>
>
>The square brackets define a range of characters; [a-z] includes all
>lowercase alphabetic characters between 'a' and 'z' and will match
>_only one character from that range_ in a given string.
>    
>    [a-z] matches 'b'
>    [a-z] matches 'z'
>    [a-z] doesn't match 'all'
>    [a-z] doesn't match '1'
>
>Your first attempt, [*.[JjPpGg]], has an extra pair of brackets.
>Secondly, it (like your second attempt) defines a range that would
>match only one character, JjPpGg:
>    
>    [JjPpGg] matches 'j'
>    [JjPpGg] matches 'G'
>    [JjPpGg] doesn't match 'JPG'
>    [JjPpGg] doesn't match 'jpg'
>
>You need to break your patterns up; what you're looking for is a
>pattern of three characters, with 'J' or 'j' in the first position,
>'P' or 'p' in the second, and 'G' or 'g' in the third. That entire
>pattern should be prepended by a string of any characters (*) and a
>period (.).
>
>Here are some examples to demonstrate what I've written above; they
>conclude with a pattern that will match the files you're looking
>for.
>
>    sh-3.00$ ls
>    a  all  test.JPG  test.jpg
>    sh-3.00$ ls [a-z]
>    a
>    sh-3.00$ ls [all]
>    a
>    sh-3.00$ ls *.[JjPpGg]
>    ls: *.[JjPpGg]: No such file or directory
>    sh-3.00$ ls *.[Jj][Pp][Gg]
>    test.JPG  test.jpg
>  
>

Thank you very much for your explanation.  Now I understand my error.  :)

Drew

-- 
Visit The Alchemist's Warehouse
Magic Tricks, DVDs, Videos, Books, & More!

http://www.alchemistswarehouse.com




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4353FCDD.2040406>