【问题标题】:.NET regex to parse ifconfig.NET 正则表达式来解析 ifconfig
【发布时间】:2015-06-10 20:06:59
【问题描述】:

我希望能够按接口然后按 inet 地址对 ifconfig 的输出进行分组。另外请假设接口块之间没有空格。

eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe12:3456/64 Scope: Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1382 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1344 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:247209 TX bytes:131216
          Interrupt:9 Base address:0xc000
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope: Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1400 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1400 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:109731 TX bytes:109731
wlan0     Link encap:Ethernet  HWaddr CC:FA:00:A9:1D:7C
          inet addr:10.92.70.35  Bcast:10.92.71.255  Mask:255.255.252.0
          inet6 addr: 2001:4898:4070:101b:cefa:ff:fea9:1d7c/64 Scope: Global
          inet6 addr: fe80::cefa:ff:fea9:1d7c/64 Scope: Link
          inet6 addr: 2001:4898:4070:101b:1d4e:9b7f:f197:2e6f/64 Scope: Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:134563 errors:0 dropped:0 overruns:0 frame:0
          TX packets:41967 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:75871586 TX bytes:9616476

将产生 3 个组,我可以参考并确定它们是以 eth 还是 wlan 开头,然后从每个组中提取 inet addr

到目前为止,我有 @"inet addr:(?<IpV4Address>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))" 来获取 inet 地址,但我还没有弄清楚如何将接口块分开。

【问题讨论】:

  • 你真的需要使用正则表达式来解析整个字符串吗?你为什么不混合一个简单的(更简单的?)string.split 和一个普通的旧 for 循环?
  • 你建议我们按什么分割?请记住,ifconfig 的输出没有标准...
  • 基本上,您可以按换行符 (\n) 分割。在所有线路上循环。忽略空行。每次该行以空格字符(制表符或空格)开头时,都会在解析器中“开始”一个新部分。
  • 请阅读问题...“假设接口块之间没有空格”。此外,您正在谈论问题要求使用正则表达式的手动逐行分析。
  • 正则表达式不是您的目标。这是您认为您将实现实际目标的方式,即解析 ifconfig 格式。我只是建议正则表达式不是解析文本的唯一方法。实际上,我确信在这种情况下使用正则表达式会过于复杂,因为要提取的部分数量很多。

标签: .net regex parsing ifconfig


【解决方案1】:

这里有一个更好的方法:通过$ route 确定默认接口并使用Destination = default 查找接口,然后执行$ ifconfig default_interface 其中default_interface 是您从$ route 确定的接口。这样只有一个接口块,您可以轻松解析inet addr

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多