为IPconfig命令拉出HostName的值

时间:2012-09-02 13:43:20

标签: regex

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

Windows IP Configuration

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

我尝试了以下选项并且无效

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

3 个答案:

答案 0 :(得分:1)

以下是我要使用的内容:

/\s+Host Name.*: (\w+)$/

答案 1 :(得分:1)

使用AWK

进行字段拆分

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

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

使用已知行位置

假设你安装了Cygwin或类似的东西,你可以使用有趣记录的位置来获取你想要的数据,而不需要正则表达式。例如:

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

只需用您对 ipconfig 的调用替换 cat 命令,您就可以获得所需的结果。

使用sed而不是

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

sed -n '/\<Host Name\>/ s/.*[[:space:]]\([[:alnum:]]\+\)$/\1/p' /tmp/foo

答案 2 :(得分:0)

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

$ipconfig = `ipconfig /all`;

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

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