我有一个yaml文件,其中有IP地址作为值与IP地址作为关键字字符串。有时该值可能有多个IP的每一个新行。有一些其他键:值对在这个文件中的值也有类似的格式IP地址(x.x.x.x),但作为关键字不是IP地址,我不想认为这是匹配的IP地址正则表达式。下面是一个样本yaml文件,其中我只想找到/匹配正则表达式的IP地址只与关键字有IP地址,其值跨越多行。
test-key-1: some_value
test-key-2: 8.23.12.0
test-key-3: some_value
IP Address: 127.0.0.1
127.0.0.1
127.0.0.1
127.0.0.1
test-key-4: test-value
如上面示例yaml文件所示,test-key-2具有与IP地址类似格式匹配的值。但我只想匹配IP地址并将其替换为某个测试值。因此,预期输出应如下所示,其中所有IP地址都替换为“some-replaced-value”,但即使test-key-2的值与IP地址类似格式匹配,它也不会更改。当用替换文本替换多行IP地址时,必须保留每行开头的空格,因为它是多行值的有效yaml格式。
test-key-1: some_value
test-key-2: 8.23.12.0
test-key-3: some_value
IP Address: some-replaced-value
some-replaced-value
some-replaced-value
some-replaced-value
test-key-4: test-value
1条答案
按热度按时间ppcbkaq51#
因为您有一些值是有效的IP地址,所以在我看来,您似乎需要一个YAML解析器作为第一轮,首先提取您感兴趣的键-值对(或排除您不感兴趣的字段),然后只对结果进行操作
我不是一个golang用户,但这似乎很相关Golang Map YAML Objects
我猜想你的程序会采取这样的形式
在转换时,使用专用的IP解析器也可能更好,因为它可能由
net
提供,而不是regex,后者可能具有额外的功能(例如,如果地址是本地的,则提供一些琐碎的功能,或者处理IPv6)