过滤输入文件中的行

时间:2019-08-22 14:52:22

标签: ansible

我正在尝试读取包含一些key=value数据的文件。我能够使用ansible的文件查找功能来做到这一点。现在的问题是我想从输入文件中排除注释,但是不确定如何做。如何取反'^#'(以#开头的行)。我尝试使用此命令{{ input_parms.split("\n")|regex_search('^[^#]') }},但未按预期工作。

这是我的输入文件

->cat mydata.cfg
#parms
name: 'foo'
place: 'bar'
id: 1

我的剧本:

---

- hosts: localhost
  vars:
    parm_file: 'mydata.cfg'
    input_parms: "{{ lookup('file', parm_file) }}"
  tasks:
    - debug: var=input_parms.split("\n")

当前输出:

ok: [localhost] => {
    "input_parms.split(\"\n\")": [
        "#parms",
        "name: 'foo'",
        "place: 'bar'",
        "id: 1"
    ]
}

我的预期输出,没有注释行(#parms):

ok: [localhost] => {
    "input_parms.split(\"\n\")": [
        "name: 'foo'",
        "place: 'bar'",
        "id: 1"
    ]
}

1 个答案:

答案 0 :(得分:3)

您可以使用selectmatch过滤器来选择不以#开头的行:

    - debug:
        var: input_parms.splitlines()|select('match', '^[^#]')|list

哪个会产生:

TASK [debug] *************************************************************************
ok: [localhost] => {
    "input_parms.splitlines()|select('match', '^[^#]')|list": [
        "name: 'foo'",
        "place: 'bar'",
        "id: 1"
    ]
}