Как удалить лишний мусор из переменной?

#regex #ansible #yaml

#регулярное выражение #ансибль #ямл

Вопрос:

Как я могу удалить лишние кавычки и запятые, чтобы осталась только полезная информация? Вот переменная для работы:

 "ping.stdout_lines": [  [  "p",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  "",  " SEQ HOST SIZE TTL TIME STATUS ",  " 0 192.168.0.1 56 64 1ms ",  " 1 192.168.0.1 56 64 1ms ",  " 2 192.168.0.1 56 64 1ms ",  " 3 192.168.0.1 56 64 1ms ",  " 4 192.168.0.1 56 64 1ms ",  " sent=5 received=5 packet-loss=0% min-rtt=1ms avg-rtt=1ms max-rtt=1ms"  ] ]  

Я пытался сделать это с помощью регулярных выражений, но ничего не выходит.

Желаемый результат:

 SEQ HOST SIZE TTL TIME STATUS   0 192.168.0.1 56 64 1ms   1 192.168.0.1 56 64 1ms   2 192.168.0.1 56 64 1ms   3 192.168.0.1 56 64 1ms   4 192.168.0.1 56 64 1ms   sent=5 received=5 packet-loss=0% min-rtt=1ms avg-rtt=1ms max-rtt=1ms  

Я никак не могу в этом разобраться.

Ответ №1:

Просто используйте select без теста, он отклоняет пустые строки, например

 - debug:  msg: "{{ item|select }}"  loop: "{{ ping.stdout_lines }}"  

дает

 msg:  - p  - ' SEQ HOST SIZE TTL TIME STATUS '  - ' 0 192.168.0.1 56 64 1ms '  - ' 1 192.168.0.1 56 64 1ms '  - ' 2 192.168.0.1 56 64 1ms '  - ' 3 192.168.0.1 56 64 1ms '  - ' 4 192.168.0.1 56 64 1ms '  - ' sent=5 received=5 packet-loss=0% min-rtt=1ms avg-rtt=1ms max-rtt=1ms'  

Если вы хотите сохранить отфильтрованные данные в переменной

 pings: "{{ ping.stdout_lines|map('select')|list }}"  

дает

 pings:  - - p  - ' SEQ HOST SIZE TTL TIME STATUS '  - ' 0 192.168.0.1 56 64 1ms '  - ' 1 192.168.0.1 56 64 1ms '  - ' 2 192.168.0.1 56 64 1ms '  - ' 3 192.168.0.1 56 64 1ms '  - ' 4 192.168.0.1 56 64 1ms '  - ' sent=5 received=5 packet-loss=0% min-rtt=1ms avg-rtt=1ms max-rtt=1ms'