List Ansible-读取文件、提取特定行、提取列并分配给变量

List Ansible-读取文件、提取特定行、提取列并分配给变量,list,ansible,lookup,List,Ansible,Lookup,我需要一些帮助,从文件中提取特定行,然后提取列,将其分配给变量,然后在下一个任务中使用该变量 我在confluent broker服务器上有这种格式的文件 Save the key. It cannot be retrieved later. +------------+----------------------------------------------+ | Enc Key | omykeyvaluecontinuousstringgoeshereandmakelong= | +---

我需要一些帮助,从文件中提取特定行,然后提取列,将其分配给变量,然后在下一个任务中使用该变量

我在confluent broker服务器上有这种格式的文件

Save the key. It cannot be retrieved later.
+------------+----------------------------------------------+
| Enc Key | omykeyvaluecontinuousstringgoeshereandmakelong= |
+------------+----------------------------------------------+
我正在尝试编写Ansible任务,它将读取第三行,然后将密钥提取到一个变量中,我需要将该变量导出为任务中的环境变量。在下一个任务中,我将作为shell命令执行一个汇合命令

我尝试了下面这样的方法,但不起作用-我遇到了错误

vars:
    ansible_ssh_extra_args: "-o StrictHostKeyChecking=no"
    ansible_host_key_checking: false
    contents: "{{ lookup('file', '/etc/kafka/info.txt') }}"
    contents2: "{{ lookup('file', '/etc/kafka/info.txt').splitlines() }}"

- name: set fact
  set_fact:
    extract_key: "{{ contents.split('\n')[2] }}"

- name: Display output
  debug: msg="{{ extract_key }}"
然后从extract_key变量中提取键值

我怎样才能做到这一点


谢谢

下面的任务就可以了

-设置事实:
提取_键:“{contents.split('\n').2.split('|').2 | trim}”
给予

extract_key:myKeyValueContinuousStringGoesher和MakeLong=

如果只有文本行是固定的,则可以使用此筛选器:

- name: capturing Key
  shell: echo {{ contents }} | head -3 | tail -1 | sed 's/|/\n/g' | sed -n 3p
  register: extract_key

- name: Display output
  debug: msg="{{ extract_key.stdout }}"

这将返回MyKeyValueContinuousStringGoeShereandMakeLong=

您可以查看
regexp\u replace
过滤器来提取字符串的一部分。谢谢。这很好用,这也很有效。我试图修复语法-在{{contents}周围添加引号-似乎我没有编辑权限。你可能想做出改变