removing the extra new line from the stdout_lines in ansible

Hi all,

I am trying to parse the stdout_lines to find the matching strings in a line. But the problem is stdout_lines adds new line at the end and the match string also contains new line which looks ugly. Any idea how I can fix it?
I tried trim, difference etc after some google around but it does not work inside the jinja template as below. I am stuck here… Can anyone please help?

stdout_lines

ok: [10.10.25.1] => {

“stdout_lines”: [

“X”,

“B”,

“C”,

“D”,

“E”,

“F”,

“G”,

“H”,

“I”,

“J”,

“A”

]

}

-name : Test match string
 - command: |
        printf "X\nB\nC\n\D\nE\nF\n\G\nH\nI\nJ\nA\n"
        register: cmd
  • name: Find the matching string

set_fact:

msg: |

{% for line in cmd.stdout_lines %}

{% if line is defined and ‘A’ in line %}

{{ line }}

{% endif %}

{% endfor %}

when:

  • cmd.stdout_lines is defined

  • debug:

var: msg

The output looks as below as it adds the new line till the match “A” found(e.g X\n,B\n blah blah) and it looks ugly. But I dont want these new lines in my output. Can anybody please throw some idea how can i fix it?

Actual Output:

I’d probably just use something like this instead:

  • debug:
    msg: “{{ stdout_lines|select(‘search’, ‘A’)|first }}”

Thanks for your quick help. But I need to use the conditionals for searching multiple strings. Is it possible? When I use
({{ stdout_lines|select(‘search’, ‘A’)|first }}) or ({{ stdout_lines|select(‘search’, ‘B’)|first }}) it dont work and returning me a generator object. Can you please help?

this is where filter_plugins may come handy.