정규식을 사용하여 파일의 문자열 줄에서 첫 번째 숫자 세트/세트를 추출하는 방법행 무시두 개의 숫자 세트, 모든 기호(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
예를 들어 플레이북 변수에 다음 선언을 입력합니다.
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]