Perl正则表达式和参数

mai*_*ash 1 linux perl

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

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

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

而正则表达式是什么

$RESULTS =~ /addr:(\S+)\s+/
Run Code Online (Sandbox Code Playgroud)

手段?

  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";
Run Code Online (Sandbox Code Playgroud)

ser*_*sat 5

如果=~匹配表达式为true,则特殊变量$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在捕获括号中的值.

请参阅此问题以了解$1:Perl中$ 1的含义是什么?