파일의 문자열 줄에서 첫 번째 숫자 집합만 추출하는 정규식

파일의 문자열 줄에서 첫 번째 숫자 집합만 추출하는 정규식

정규식을 사용하여 파일의 문자열 줄에서 첫 번째 숫자 세트/세트를 추출하는 방법행 무시두 개의 숫자 세트, 모든 기호(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]

관련 정보