如何在Ansible中提取stdout_lines第二列的所有用户名?
提取Ansible输出中第二列的所有用户名
解决方案
在Ansible的Jinja2语法中,批量提取多行指定列需要结合切片、map过滤器和列表转换实现,具体操作如下:
1. 跳过表头,获取数据行
使用stdout_lines[1:]切片语法,跳过第一行表头,直接获取所有数据行(Jinja2中索引从0开始,[1:]表示从第二行到末尾的所有元素)。
2. 拆分每行并提取目标列
通过map('split')将每行字符串按任意空白字符拆分(自动处理连续空格),再用map(attribute='1')提取每个拆分后列表的第二个元素(对应第二列),最后用list将结果转为可直接使用的列表。
完整示例Playbook
- name: "gitea - extract all usernames" set_fact: gitea_usernames: "{{ users_checklist.stdout_lines[1:] | map('split') | map(attribute='1') | list }}" - name: "gitea - show extracted usernames" debug: var: gitea_usernames
预期执行结果
运行后会输出提取到的用户名列表:
ok: [giteahost] => { "gitea_usernames": [ "Superadmin", "git" ] }
补充说明
- 如果输出行使用固定分隔符(如制表符),可指定
split('\t')精准拆分,默认split()已适配任意空白分隔的场景。 - 提取后的列表可直接用于后续任务,比如循环处理每个用户。
内容的提问来源于stack exchange,提问作者Sabin Andrei Drăghici
相关产品推荐
相关产品推荐

