[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: autodetecting MBR location



Bart Schuller <schuller@lunatech.com> wrote:
>On Tue, Jan 02, 2001 at 02:24:22PM +0100, Tollef Fog Heen wrote:
>> | s/[0-9]*//
>> | s/part$/disc/
>> 
>> What is the use of the first s/?  Unless your first letter is a digit,
>> it will just remove the zero-width string '' between the first / and
>> the beginning of the string.
>> 
>> A better solution will probably be to 
>> 
>> s/[0-9]$//
>> 
>> which will remove 5 from /dev/hda5.
>
>You seem to know that $ and ^ anchor a match to the end or the beginning
>of a string. So you should also know that in the absence of one of
>these characters, the match may start anywhere in the string. So the
>statement works fine as it is.

That's not true; try it.

  [cjw44@riva ~]$ echo /dev/hda1 | perl -pe 's/[0-9]*//'
  /dev/hda1
  [cjw44@riva ~]$ echo /dev/hda1 | perl -pe 's/[0-9]+//'
  /dev/hda

Contrary to the subconscious assumption many people make, the first
priority for a regex is to match earliest, not to match longest.
regex(7) specifically mentions this:

       In  the  event  that  an RE could match more than one sub-
       string of a given string, the RE matches the one  starting
       earliest  in  the string.  If the RE could match more than
       one substring starting  at  that  point,  it  matches  the
       longest.

>However, stylistically s/[0-9]*// is better written as s/[0-9]+//
>because the case where no digits match is better classified as
>"not a match".

True; even s/\d+// or s/\d+$// (assuming that the partition numbers are
always at the end, even in devfs - I'm not familiar with that).

-- 
Colin Watson                                     [cjw44@flatline.org.uk]



Reply to: