Regex IPconfig命令的主机名的拉取值

Regex IPconfig命令的主机名的拉取值,regex,Regex,我有一个用于IPCONFIG命令的文本文件,我想利用REGEX获取主机名的值,即S4333AAB45 Windows IP Configuration Host Name . . . . . . . . . . . . : S4333AAB45 Primary Dns Suffix . . . . . . . : Node Type . . . . . . . . . . . . : Hybrid IP Routing Enabled. . . . . . . . :

我有一个用于IPCONFIG命令的文本文件,我想利用REGEX获取主机名的值,即S4333AAB45

Windows IP Configuration

   Host Name . . . . . . . . . . . . : S4333AAB45
   Primary Dns Suffix  . . . . . . . :
   Node Type . . . . . . . . . . . . : Hybrid
   IP Routing Enabled. . . . . . . . : No
我尝试了以下选项,但不起作用

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

以下是我将使用的:

/\s+Host Name.*: (\w+)$/
使用AWK进行字段拆分 您没有说明正在使用的正则表达式引擎,也没有说明为什么需要使用正则表达式来匹配主机名部分。如果您有权访问AWK,则可以将其视为字段拆分问题。例如:

awk '/\<Host Name\>/ { print $NF }' /tmp/foo
cat /tmp/foo | head -n3 | cut -d: -f2 | tr -d ' '
sed -n '/\<Host Name\>/ s/.*[[:space:]]\([[:alnum:]]\+\)$/\1/p' /tmp/foo
只需将cat命令替换为对ipconfig的调用,就可以得到想要的结果

改用sed 您还可以使用sed查找您感兴趣的行,并仅打印行上的尾随词。例如:

awk '/\<Host Name\>/ { print $NF }' /tmp/foo
cat /tmp/foo | head -n3 | cut -d: -f2 | tr -d ' '
sed -n '/\<Host Name\>/ s/.*[[:space:]]\([[:alnum:]]\+\)$/\1/p' /tmp/foo
sed-n'/\/s/*[[:space:]\([[:alnum:]\+\)$/\1/p'/tmp/foo
您的主机名的第一个字符是字母“S”,因此“(\d+”与您的主机名不匹配。您也无法解释主机名行上的点和冒号。因此,Weexpected的答案应该是正确的。但请注意,这里介绍了如何在不首先创建中间文件的情况下获取主机名

$ipconfig=`ipconfig/all`

($host)=$ipconfig=~/^\s*主机名。*:\s*(\w+)/m


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

我可以使用REGEX for Java或Perl for Network Mgt工具。只需单行正则表达式即可完成拉出S4333AAB45的工作。这是前面示例中所示的主机名。谢谢