我有一個使用 Ansible 除錯模塊獲得的以下字串:
{
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"cmd": [
"check"
],
"stderr_lines": [],
"stdout": "QMNAME(XXXXXX) STATUS(Running)",
"stdout_lines": [
"QMNAME(XXXXXX) STATUS(Running)"
]
}
'XXXXXXXX' 因服務器而異。
我怎么才能得到它?
我需要將它作為 systemd 模塊的一部分重用:
- name: Check Status of the Services
systemd:
name: "{{ item }}"
state: started
with_items:
- "my-{{ server.stdout | regex_search('\\(([^()] )\\)', '\\1') | trim }}-server"
when: ('server' in group_names)
我試圖修剪它并切割它,但由于尺寸不同,我得到的更少或更多。
- name: Check my_Server output
debug:
msg: "{{ server.stdout[7:-48] | trim }}"
failed_when: "'STATUS(Running)' not in server.stdout"
when: ('server' in group_names)
uj5u.com熱心網友回復:
您可以使用以下內容獲取括號之間的第一個字串,不包括括號本身:
{{ server.stdout | regex_search('\\(([^()] )\\)', '\\1') | trim }}
{{ server.stdout | regex_search('\\(([^()] )\\)', '\\1') | list | first | trim }}
該\(([^()] )\)模式匹配(第一個,然后匹配一個或多個除(and之外的字符)(被捕獲到組 1 中,因此是\1后者),然后)匹配一個字符,但未捕獲。
使用trim仍然可以,因為捕獲的子字串可能仍然在開頭和結尾包含空格。
要獲得多個匹配使用
{{ server.stdout | regex_findall('\\(\\s*([^()]*?)\\s*\\)') }}
本\(\s*([^()]*?)\s*\)場比賽
\(- 一個(字符\s*- 零個或多個空格([^()]*?)-第1組(回傳結果regex_findall):比其他任何零個或多個字符(,并)盡可能少(這樣以后\s*可以消耗之前的所有空格字符))\s*- 零個或多個空格\)- 一個)字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366151.html
