我有一个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+)/
答案 0 :(得分:1)
以下是我要使用的内容:
/\s+Host Name.*: (\w+)$/
答案 1 :(得分:1)
您没有说明您正在使用的正则表达式引擎,或者您需要使用正则表达式来匹配主机名部分的原因。如果您有权访问AWK,则可以将其视为字段拆分问题。例如:
awk '/\<Host Name\>/ { print $NF }' /tmp/foo
假设你安装了Cygwin或类似的东西,你可以使用有趣记录的位置来获取你想要的数据,而不需要正则表达式。例如:
cat /tmp/foo | head -n3 | cut -d: -f2 | tr -d ' '
只需用您对 ipconfig 的调用替换 cat 命令,您就可以获得所需的结果。
您也可以使用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 +”作为输出格式的未来变化的保险(在较新版本的命令中经常删除或扩展空格)。