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>