正規表現を使用してファイルの文字列行から最初の数値セット/セットを抽出する方法行を無視2つの数値セット、すべての記号(PASS_MAX_DAYSを除く)があり、端末に表示されます。ファイル(login.defs)が変更されていません。
例(太字のみ)
PASS_MAX_DAYS30
PASS_MAX_DAYS 30.12(無視)
PASS_MAX_DAYS $30 (無視)
PASS_MAX_DAYS 30 23(無視)
PASS_MAX_DAYS 30日(無視)
PASS_MAX_@30日目(無視)
- name: extract num from pass max days
hosts: localhost
tasks:
- lineinfile:
path: /etc/login.defs
state: absent
regexp: '(?i)^\s*PASS_MAX_DAYS\s+[0-9]+\s*$'
check_mode: yes
register: days
- name: show password max days
debug:
msg: "{{days}}" #Show max days
when: days <= 90
ベストアンサー1
与えられたファイル
shell> cat /tmp/login.defs
PASS_MAX_DAYS 30
PASS_MAX_DAYS 30 .12
PASS_MAX_DAYS $30
PASS_MAX_DAYS 30 23
PASS_MAX_DAYS 30 days
PASS_MAX_@DAYS 30
ファイルを読む
- command: cat /tmp/login.defs
register: out
たとえば、Playbook変数に次の宣言を入力します。
regexp: '(?i)^\s*PASS_MAX_DAYS\s+[0-9]+\s*$'
pass_max_days: "{{ out.stdout_lines|
select('match', regexp)|first|split|last }}"
与えられた
pass_max_days: '30'
テストのための完全なプレイブックの例
- hosts: localhost
vars:
regexp: '(?i)^\s*PASS_MAX_DAYS\s+[0-9]+\s*$'
pass_max_days: "{{ out.stdout_lines|
select('match', regexp)|first|split|last }}"
tasks:
- command: cat /tmp/login.defs
register: out
- debug:
var: pass_max_days
尋ねる:「日数をどのように比較しますか?」
A:整数に変換してください。例えば
- debug:
msg: Less than 90 days
when: pass_max_days|int < 90
- debug:
msg: Exactly 90 days
when: pass_max_days|int == 90
- debug:
msg: More than 90 days
when: pass_max_days|int > 90
与える
TASK [debug] *******************************************************
ok: [localhost] =>
msg: Less than 90 days
TASK [debug] *******************************************************
skipping: [localhost]
TASK [debug] *******************************************************
skipping: [localhost]