[K12OSN] OT: check case and format of filename

Les Mikesell lesmikesell at gmail.com
Fri Sep 26 19:17:30 UTC 2008


Rob Owens wrote:

>>> Since list has been kinda slow lately, I'll test your patience with one
>>> more scripting question.  You guys have really helped me learn a lot in
>>> the past couple of days.  I've been looking into bash parameter
>>> expansion, awk, and sed, but I'm not really sure I'm going in the right
>>> direction.
>>>
>>> I need to check a filename for a particular "format" or "convention".
>>> File names should look like this:
>>>
>>> AB12D89-S123--revA
>>> AB12D89-S123--revA--page1
>>>
>>> In other words:
>>>
>>> 1)  They should be all uppercase and numeric before the '--'
>>> 2)  They must contain '--revX', where X is any uppercase letter, and
>>> 'rev' must be lowercase.
>>> 3)  There is an optional --page# at the end, where # is any number, and
>>> 'page' must be lowercase.
>>>
>>> I can work out the logic of testing for compliance with my rules, but
>>> I'm not sure how to identify the case of each letter, nor how to split
>>> the filename up using '--' as the divider.
>>>
>>> Thanks for any advice you might have.  By the way, this is to be part of
>>> a bash script (which is to be run on my K12LTSP box).
>> Do you need a function that returns true or false depending on whether a
>> string (filename) complies with the format or do you need something that
>> returns all filenames in a directory that do or do not comply or
>> something? Did you already figure out that you're probably looking at
>> using regular expressions? http://www.regular-expressions.info/ has a
>> lot of info on regular expressions.
>>
> Yes, I've been learning about regular expressions.  I appreciate the
> link.  More stuff to read!
> 
> I need to check one particular string for compliance with the format.  I
> don't need to correct the format, I just need to inform the user that it
> is incorrect.

If you don't already know how to do something in shell/awk/sed you are 
probably better off starting with perl which can do all of the same and 
more, and even if you do know, you can do it in perl without changing a lot.

However, if you can describe your rules in terms of pathname expansions 
instead of regexps (which might be the point of the rules in the first 
place since you are talking about filenames...,) you might be able to do 
the tests in a shell case statement.  It's hard to get variable-sized 
parts right in filename globs unless you enable the extended patterns, 
though.

-- 
   Les Mikesell
    lesmikesell at gmail.com





More information about the K12OSN mailing list