/ / Regex съвпадение на дума, изключваща някои други - regex, linux, perl

Regex съвпада дума, изключваща някои други - regex, linux, perl

Опитвам се да създам реджекс, който улавя дума в ред (основно това е името на дисковото устройство), но изключва всички имена с някакъв формат. Например:

if (/^s*(?:d+s+){3}(S+)s.*/)

Този регекс съвпада:

8       80 7814026584 sdf

sdf в този ред. Но има някои ram дискове, които искам да изключа. напр. ram1, ram2, ram3, ..ram15 и т.н. Как мога да изключа всички устройства, започващи с „ram“?

Отговори:

1 за отговор № 1

С примера показвате, че е по-лесно разцепване линията и след това можете лесно да обработвате.

Приемам, че четвъртото поле винаги е критерият за това дали да обработва или изключва реда.

Ако приемем това $fh е файловият файл за файла, който обработвате

while (<$fh>)
{
my @fields = split;

# Skip this line if the fourth field starts with "ram"
next if $fields[3] =~ /^ram/;

# Process as needed
# Numbers are at indices 0, 1, 2, and disk device name is $fields[3]
}

Най- split по-горе е същото като split " ", $_, където " " е всяко количество от всяко бяло пространство.


0 за отговор № 2

Ако искате специален операционен оператор, отколкото мисля, че този кратък регекс помага?

[^ Г] + ramw {1,2}

въведете описанието на изображението тук