go - 解析文本文件以匹配字符串并提取值(在 Golang 中)

标签 go

我正在为一个似乎很常见的需求摸不着头脑,但我无法在网络上找到任何示例。

我有这样一个文件:

  answer VNET_1_DHCP yes
  answer VNET_1_DHCP_CFG_HASH 4CF2C196E368CE83B9D1895C5E05301CDFDEBCA0  
  answer VNET_1_HOSTONLY_NETMASK 255.255.255.0
  answer VNET_1_HOSTONLY_SUBNET 192.168.224.0
  answer VNET_1_VIRTUAL_ADAPTER yes
  answer VNET_8_DHCP yes
  answer VNET_8_DHCP_CFG_HASH D326C0BC7FF6C38C57AF341F9075E576C175B250
  answer VNET_8_HOSTONLY_NETMASK 255.255.255.0
  answer VNET_8_HOSTONLY_SUBNET 172.16.102.0
  answer VNET_8_NAT yes
  answer VNET_8_VIRTUAL_ADAPTER yes

我需要提取特定子网 (192.168.224.0) 的 VNET 编号。 VNET 编号可能会有所不同(理论上,子网甚至可能不存在)。所以我需要匹配子网是否存在,如果存在则提取网络号(本例中为 1)。

我发现在 BASH 中实现这个非常容易:

 if grep -q 192.168.224.0 ./networking; then
      echo "The ${VMNET_SUBNET} network already exists"
      NETWORK_NUMBER=$(grep ${VMNET_SUBNET} ./networking | cut -d'_' -f 2)
      echo NETWORK_NUMBER  
 else <do something to create it.....> 

我正在尝试找到使用 Go 实现此功能的最简单方法。

谢谢。

最佳答案

您可以使用 regular expression :

re := regexp.MustCompile(`.*VNET_(\d+)_.*192.168.224.0`)
matches := re.FindStringSubmatch(text)
fmt.Println(matches[1])

Playground :http://play.golang.org/p/NQlA2BObtU .

关于go - 解析文本文件以匹配字符串并提取值(在 Golang 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440268/

相关文章:

sql - Golang 中的跨数据库准备语句绑定(bind)(like 和 where in)

map 上的 golang 类型断言令人 panic

postgresql - 通过 pq 连接到 PostgreSQL 数据库返回 "bad connection"错误

跨并行 goroutine 共享 channel 时的 Golang 竞争条件

go - 在 Golang 中打印 ASCII 字符

go - 如何在 Terratest Terraform 设置中覆盖远程状态

go - 如何查看编译器所做的优化

sorting - 如何按 map 的值对 slice 进行排序

mysql - golang - mysql 驱动 - 数据库函数

c - 为什么在使用 libiconv 而不是 iconv 二进制文件时会得到不同的结果?