Reputation: 185
I am trying parse month,day and year from show clock output using regex_search, getting error.
from cli of a router i see this -
sh clock
16:22:12.975 PST Wed Jan 27 2021
- name: Run sh log
cisco.ios.ios_command:
commands:
- sh clock
register: output1
- name: sh clock output
debug:
msg: "{{ output1.stdout_lines | regex_search('(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)^\s+\d{1,2}\s+\d{4}' }}"
error
The offending line appears to be:
debug:
msg: "{{ output1.stdout_lines | regex_search('(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+\d{1,2}\s+\d{4}' }}"
^ here
We could be wrong, but this one looks like it might be an issue with
missing quotes. Always quote template expression brackets when they
start a value. For instance:
with_items:
- {{ foo }}
Should be written as:
with_items:
- "{{ foo }}"
desired/wanted debug msg is below ,i don't want time, just need month day and year
Jan 27 2021
Upvotes: 0
Views: 539
Reputation: 68189
Use regex_replace
. Put the regex into a separate single-quoted variable. For example, the task below does the job
- name: sh clock output
debug:
msg: "{{ output1.stdout_lines|regex_replace(my_regex, my_replace) }}"
vars:
my_regex: '^(.*)(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|Jun(e)?|Jul(y)?|Aug(ust)?|Sep(tember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)\s+(\d{1,2})\s+(\d{4})$'
my_replace: '\2 \14 \15'
The splitting is simpler. For example, the task below gives the same result
- debug:
msg: "{{ arr[-3] }} {{ arr[-2] }} {{ arr[-1] }}"
vars:
arr: "{{ output1.stdout_lines.split() }}"
Upvotes: 1