我有以下價值:
stdout_lines: [
[
"iso.3.6.1.2.1.17.4.3.1.1.0.80.121.102.104.4 \"00 50 79 66 68 04 \""
],
[
"iso.3.6.1.2.1.17.4.3.1.1.0.80.121.102.104.6 \"00 50 79 66 68 06 \""
],
[
"iso.3.6.1.2.1.17.4.3.1.1.0.80.121.102.104.8 \"00 50 79 66 68 08 \""
]
]
我想以下列形式獲取 MAC 地址值:
00:50:79:66:68:04
00:50:79:66:68:06
00:50:79:66:68:08
這就是我試圖在我的劇本中做的事情:
- set_fact:
mac: "{{ stdout_lines|first|regex_replace(_regex, _replace)|trim }}"
vars:
_regex: '.*"(.*)"'
_replace: '\1'
- set_fact:
matched: "{{ matched|d([]) [item[2:]|join(':')] }}"
with_items:
- "{{ mac }}"
事實證明有些胡說八道。我究竟做錯了什么?
uj5u.com熱心網友回復:
試試這個劇本:串列,用和by捕獲字串的flatten右側部分regex_searchtrimreplacespace:
- name: "make this working"
hosts: localhost
vars:
mac:
- - iso.3.6.1.2.1.17.4.3.1.1.0.80.121.102.104.4 "00 50 79 66 68 04 "
- - iso.3.6.1.2.1.17.4.3.1.1.0.80.121.102.104.6 "00 50 79 66 68 06 "
- - iso.3.6.1.2.1.17.4.3.1.1.0.80.121.102.104.8 "00 50 79 66 68 08 "
tasks:
- set_fact:
result: "{{ result | d([]) [reg] }}"
loop: "{{ mac | flatten }}"
vars:
reg: "{{ item | regex_search('(\\d\\d ){6}') | trim | replace(' ',':')}}"
- debug:
var: result
結果:
ok: [localhost] => {
"result": [
"00:50:79:66:68:04",
"00:50:79:66:68:06",
"00:50:79:66:68:08"
]
}
uj5u.com熱心網友回復:
展平資料,然后映射 regex_replace和trim。例如
- set_fact:
mac: "{{ stdout_lines|
flatten|
map('regex_replace', _regex, _replace)|
map('trim')|
map('split')|
map('join', ':')|
list }}"
vars:
_regex: '.*"(.*)"'
_replace: '\1'
給
mac:
- 00:50:79:66:68:04
- 00:50:79:66:68:06
- 00:50:79:66:68:08
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432357.html
上一篇:在我的正則運算式中解決災難性回溯
下一篇:正則運算式替換未正確洗掉字符
