Perl正则表达式和参数

时间:2015-07-07 10:53:09

标签: linux perl

以下Perl示例是长Perl脚本的一部分。

此脚本从ifconfig -a获取结果并打印IP地址。

有人可以解释$1如何获取IP地址吗?

正则表达式是什么

$RESULTS =~ /addr:(\S+)\s+/

装置?

  my $COMMAND = "ifconfig -a | grep inet | grep -v 127.0.0.1 | head -1";
  my $RESULTS = `$COMMAND`;
  chomp $RESULTS;
  #          inet addr:106.13.4.9  Bcast:106.13.4.255  Mask:255.255.255.0
  #          inet 106.13.4.9 netmask ffffff80 broadcast 106.13.4.127


if ( $RESULTS =~ /addr:(\S+)\s+/ ) {
    $IpAddress = $1;
}
elsif ( $RESULTS =~ /inet\s+(\S+)\s+/ ) {
    $IpAddress = $1;
}

print "IpAddress = $IpAddress\n";

3 个答案:

答案 0 :(得分:5)

如果=~匹配表达式为真,则特殊变量$1$2,...将是与括号中的模式部分匹配的子字符串。 $1匹配左括号,$2左括号,依此类推。

\S匹配任何非空白字符,
+匹配1次或更多次,
\s匹配任何空白字符(空格,制表符,换行符),

因此,在你的正则表达式中,它匹配addr:(any non-whitespace character 1 or more time)matches any whitespace character one or more time。并$1捕获括号中的值。

请参阅此问题以了解$1What does $1 mean in Perl?

答案 1 :(得分:1)

=~是perl中的匹配运算符,如果字符串(此处$RESULTS)可以与正则表达式匹配(此处/addr:(\S+)\s+/

,则计算结果为true

当在perl中匹配正则表达式时,会自动赋值变量:

  • $&保存与整个表达式匹配的部分
  • $1保存与第一个捕获组(一组parantheses)匹配的部分
  • $2第二个捕获组的部分
  • 等......

答案 2 :(得分:1)

$1$2$&等会捕获上次成功匹配的值。

\S+匹配任何并否定\s(空白)。