我想从 terraform.tfstate 文件中提取字符串。
我正在运行以下 ack 命令:...
awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate
运行此命令会导致:
"private_ip": "10.42.229.45",
我想提取第二组双引号之间的字符串,10.42.229.45
并将其复制到输出文件中。
有人可以提供如何做到这一点的指导/建议吗?
答案1
很可能您所需要的只是:
awk -F'"' '/nifi1a/{f=1} f && /private_ip/{print $4; exit}' terraform.tfstate
但是如果没有示例输入,这只是一个猜测,代码的原始部分可能不是最佳的,可能有一些更好的(更简洁、可移植、健壮等)方法来完成您想要的事情。
不要假设阅读您问题的人会知道“terraform.tfstate 文件”或任何其他输入格式是什么,请始终向我们展示简洁、可测试的示例输入和预期输出,以便我们能够最好地帮助您。
答案2
print
您可以使用字符串split
并仅打印所需的部分:
awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4];exit}' terraform.tfstate
如果您想创建第二个命令来处理结果,您可以使用命令:
awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate | awk -F\" '{print $4}'
这个想法是使用双引号"
作为分隔符并$0
在数组中拆分。然后只打印数组的一个元素。
如果你想添加主机名,命令将是:
awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4], "nifi1a";exit}' terraform.tfstate >>/etc/hosts