Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Awk 多重匹配模式_Awk - Fatal编程技术网

Awk 多重匹配模式

Awk 多重匹配模式,awk,Awk,awk似乎匹配与表达式匹配的所有模式,并执行相应的操作。是否存在可以关联的优先级 例如,在下面的示例中,以#(注释)开头的行由两种模式匹配,并且两种操作都被执行。我希望注释的行只匹配第一个操作 /^#.*/ { // Action for lines starting with '#' } { // Action for other lines } 如果你想保持你已经拥有的代码基本上完好无损,你可以使用awk语句。一旦遇到next语句,awk跳过处理当前记录并转到下一行

awk似乎匹配与表达式匹配的所有模式,并执行相应的操作。是否存在可以关联的优先级

例如,在下面的示例中,以#(注释)开头的行由两种模式匹配,并且两种操作都被执行。我希望注释的行只匹配第一个操作

/^#.*/  {
    // Action for lines starting with '#'
}


{
    // Action for other lines
}

如果你想保持你已经拥有的代码基本上完好无损,你可以使用
awk
语句。一旦遇到
next
语句,
awk
跳过处理当前记录并转到下一行


因此,如果你把
next
放在第一个块的底部,第二个块就不会被执行了。

为什么不干脆
if,else

awk '{ if ($0 ~ /^#/) 
           // Action for lines starting with '#'
       else
           // Action for other lines
      }'

另一个选项是使用模式求反运算符“!”,对于“其他所有内容”行,如果您的匹配选项为二进制:

/^#.*/ {
  // Action for lines starting with '#'
}

!/^#.*/ {
  // Action for other lines
}
当然,您的第二个模式也可以简单地匹配所有不以哈希开头的内容,即/^[^#]*/

但想必,您的示例是一个简化。对于复杂的正则表达式,制作精确的逆匹配可能是不可能的。否定运算符只是使它显式且简单明了


而且,您可能已经知道,“*”部分是不必要的。

为什么不使用else语句?@Zulu:因为在AWK中习惯于在块外使用动作,然后使用
next
跳过后续块。