Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Parsing of text file to match string and extract value (in Golang)

Tags:

go

I am scratching my head around a need that seems to be potentially common but I couldn't locate any example on the web.

I have a file like this:

  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

I need to extract the VNET number of a specific subnet (192.168.224.0). VNET numbers could vary (and the subnet could, in theory, not even exist). So I need to match if the subnet exists, and if exists extract the network number (1 in this example).

I found it to be SUPER easy to implement this in 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.....> 

I am trying to find the easiest way to implement this using Go.

Thanks.

like image 743
mreferre Avatar asked Dec 09 '22 00:12

mreferre


1 Answers

You can use a 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.

like image 133
Ainar-G Avatar answered Dec 11 '22 07:12

Ainar-G