#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'