创建bash脚本以从现有linux etc/hosts文件创建yaml文件
我不熟悉脚本编写,但一直负责从现有的Linux/etc/hosts文件创建yaml文件。在此处使用主机文件:创建bash脚本以从现有linux etc/hosts文件创建yaml文件,bash,yaml,hosts,Bash,Yaml,Hosts,我不熟悉脚本编写,但一直负责从现有的Linux/etc/hosts文件创建yaml文件。在此处使用主机文件: 127.0.0.1 localhost 192.168.1.2 host1 192.168.1.3 host2 192.168.1.4 host3 192.168.1.5 host4 ..要创建如下所示的yaml文件: host_entries: host1: ip: '192.168.1.2' host2: ip: '192.
127.0.0.1 localhost
192.168.1.2 host1
192.168.1.3 host2
192.168.1.4 host3
192.168.1.5 host4
..要创建如下所示的yaml文件:
host_entries:
host1:
ip: '192.168.1.2'
host2:
ip: '192.168.1.3'
host3:
ip: '192.168.1.4'
host4:
ip: '192.168.1.5'
我知道有不止一种方法可以达到理想的解决方案。但我不太确定如何编写脚本以获得正确的格式。如果您有任何建议,我们将不胜感激。简单且错误(不保证输出对所有可能的输入都有效):
容易和错误(不能强烈保证输出对于所有可能的输入都是有效的YAML):
那么,到目前为止你试过什么?请先展示你的作品,然后请求社区帮助。我以前没有使用过,但是
awk
可以从bash直接完成。你只需要自己做一些研究,看看是什么样子的YAML文件,还是等效解析的YAML文件?由于YAML是JSON的超集,因此可以很容易地使用jq
来完成任务。明确地说,使用jq
将为您提供语法正确的输出的有力保证——用Python或类似语言编写到规范中的YAML模块也是如此。使用本机工具(无论是bash
本身还是awk
或类似工具)所做的任何事情都不会有这样的保证。@MikeVelazco,因为awk
是它自己的独立语言,所以可以很容易地说Python可以从bash直接做到这一点。:)那么,到目前为止你试过什么?请先展示你的作品,然后请求社区帮助。我以前没有使用过,但是awk
可以从bash直接完成。你只需要自己做一些研究,看看是什么样子的YAML文件,还是等效解析的YAML文件?由于YAML是JSON的超集,因此可以很容易地使用jq
来完成任务。明确地说,使用jq
将为您提供语法正确的输出的有力保证——用Python或类似语言编写到规范中的YAML模块也是如此。使用本机工具(无论是bash
本身还是awk
或类似工具)所做的任何事情都不会有这样的保证。@MikeVelazco,因为awk
是它自己的独立语言,所以可以很容易地说Python可以从bash直接做到这一点。:)感谢这篇文章,它给了我一些关于如何从结构化输入生成yaml的好主意。感谢这篇文章,它给了我一些关于如何从结构化输入生成yaml的好主意。
{
printf 'host_entries:\n'
while read -r -a line; do
[[ ${line[0]} ]] || continue # skip blank lines
[[ ${line[0]} = "#"* ]] && continue # skip comments
[[ ${line[0]} = 127.0.0.1 ]] && continue # skip localhost
set -- "${line[@]}" # assign words read from line to current argument list
ip=$1; shift # assign first word from line to ip
for name; do # iterate over other words, treating them as names
printf " %s:\n ip: '%s'\n" "$name" "$ip"
done
done
} </etc/hosts >yourfile.yaml
host_entries:
host1:
ip: '192.168.1.2'
host2:
ip: '192.168.1.3'
host3:
ip: '192.168.1.4'
host4:
ip: '192.168.1.5'