0

我有一个用于 IPCONFIG 命令的文本文件,并且有兴趣使用 REGEX 获取 HOST NAME 的值,即 S4333AAB45。

Windows IP Configuration

   Host Name . . . . . . . . . . . . : S4333AAB45
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No

我尝试了以下选项,但它没有用

/\bHost Name\s+(\d+)/
4

3 回答 3

1

这是我会使用的:

/\s+Host Name.*: (\w+)$/
于 2012-09-02T14:00:46.237 回答
1

在 AWK 中使用字段拆分

你没有说你正在使用什么正则表达式引擎,或者为什么你需要使用正则表达式来匹配主机名部分。如果您有权访问 AWK,则可以将其视为字段拆分问题。例如:

awk '/\<Host Name\>/ { print $NF }' /tmp/foo

使用已知线位置

假设您已经安装了 Cygwin 或类似软件,您可以使用感兴趣记录的位置来获取您想要的数据,而无需使用正则表达式。例如:

cat /tmp/foo | head -n3 | cut -d: -f2 | tr -d ' '

只需将cat命令替换为您对ipconfig的调用,您应该会得到您想要的结果。

使用 sed 代替

您还可以使用 sed 找到您感兴趣的行,并仅打印出该行的尾随单词。例如:

sed -n '/\<Host Name\>/ s/.*[[:space:]]\([[:alnum:]]\+\)$/\1/p' /tmp/foo
于 2012-09-02T15:00:00.887 回答
0

您的主机有一个字母“S”作为主机名的第一个字符,因此“(\d+)”不适合匹配您的主机名。您也没有考虑主机名行上的点和冒号。因此,weexpectedTHIS 的答案应该可以解决问题。但是为了您的信息,以下是在不首先创建中间文件的情况下获取主机名的方法。

$ipconfig = `ipconfig /all`;

($host) = $ipconfig =~ /^\s*Host Name.*:\s*(\w+)/m;

您将需要其中的“/m”,以便“^”将匹配 $ipconfig 的多行内容中任何行的开头。我倾向于使用“\s*”而不是“\s+”作为一种保险,以防止未来输出格式的变化(在新版本的命令中,空格经常被删除或扩展)。

于 2013-12-26T21:40:05.377 回答