正则表达式匹配排除其他一些词的单词

时间:2016-12-20 00:46:22

标签: regex linux perl

我尝试创建一个在一行中捕获单词的正则表达式(基本上它是一个磁盘设备名称),但不包括所有具有某种格式的名称。例如:

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

此正则表达式匹配:

8       80 7814026584 sdf

这行中的sdf。但是我想要排除一些ram磁盘。例如ram1,ram2,ram3,.. ram15等。如何排除以“ram”开头的所有设备?

2 个答案:

答案 0 :(得分:1)

通过示例,您可以更轻松地split该行,然后您也可以轻松处理。

我认为第四个字段始终是处理或排除该行的标准。

假设$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]
}

上面的splitsplit ' ', $_相同,其中' '是任意数量的空白区域。

答案 1 :(得分:0)

如果你想要特殊的执行ram比我认为这个短正则表达式有帮助吗?

<强> [^ R] +冲压\ W {1,2}

enter image description here