다음 세부 정보를 얻으려면 명령이나 ansibile 정규식을 얻도록 도와주세요.

다음 세부 정보를 얻으려면 명령이나 ansibile 정규식을 얻도록 도와주세요.

내 데이터:

KVM05786Y: The Communication host "ADMK05786HTREDIRECT_JA3A" is SUCESS
KVM05786Y: The Communication host "KOPYUTRCEPORT_JA3A" is SUCESS
KVM05786Y: The Communication host "ADMK05786HTSRM_JA3A" is SUCESS
KVM05786Y: The Communication host "ADMK05786HTIAS_JA3A" is SUCESS
KVM05786Y: The Communication host "ADMK05786HTOTN_JA3A" is SUCESS
KVM05786Y: The Communication host "ADMK05786HTWPM" is SUCESS
KVM05786Y: The Communication host "OCAIDEKD_JA3A" is SUCESS
KVM05786Y: The Communication host "ADMK05786HTSC_JA3A" is SUCESS

위의 데이터에서 아래의 이름만 표시하고 싶습니다. 이는 host이후 및 이전에 텍스트를 찾는 것을 의미합니다 is. 이 작업을 수행할 수 있는 Linux 명령을 알려주십시오.

ADMK05786HTREDIRECT_JA3A
KOPYUTRCEPORT_JA3A
ADMK05786HTSRM_JA3A
ADMK05786HTIAS_JA3A
ADMK05786HTOTN_JA3A
ADMK05786HTWPM
OCAIDEKD_JA3A
ADMK05786HTSC_JA3A

나는 이것을 ansible에서 시도했습니다.

name: "Get data"
shell: cat /var/tmp/http_data.txt
register: key_data
set_fact:
service_name: "{{ service_name | default([]) + [item|regex_search( 'The Communication host\s+"(\S+)"\s+is SUCESS.*','\1' )] }}"

with_items: "{{ key_data.stdout_lines }}"

답변1

몇 가지 다른 방법:

  1. host "와 사이에서 아무거나 선택하세요 " is:

    $ sed -En 's/.*host "([^"]*)" is.*/\1/p' file
    ADMK05786HTREDIRECT_JA3A
    KOPYUTRCEPORT_JA3A
    ADMK05786HTSRM_JA3A
    ADMK05786HTIAS_JA3A
    ADMK05786HTOTN_JA3A
    ADMK05786HTWPM
    OCAIDEKD_JA3A
    ADMK05786HTSC_JA3A
    

    또는 grepPerl 호환 정규식 지원( -P) 을 사용하십시오.주위를 둘러보세요:

    $ grep -oP '(?<=host ").+?(?=" is )' file
    ADMK05786HTREDIRECT_JA3A
    KOPYUTRCEPORT_JA3A
    ADMK05786HTSRM_JA3A
    ADMK05786HTIAS_JA3A
    ADMK05786HTOTN_JA3A
    ADMK05786HTWPM
    OCAIDEKD_JA3A
    ADMK05786HTSC_JA3A
    
  2. 대기열에서 위치를 사용하십시오. 우리는 항상 공백으로 구분된 다섯 번째 필드를 원한다고 가정합니다.

    $ awk '{print $5}' file | tr -d '"'
    ADMK05786HTREDIRECT_JA3A
    KOPYUTRCEPORT_JA3A
    ADMK05786HTSRM_JA3A
    ADMK05786HTIAS_JA3A
    ADMK05786HTOTN_JA3A
    ADMK05786HTWPM
    OCAIDEKD_JA3A
    ADMK05786HTSC_JA3A
    

    또는 다음 따옴표를 제거하십시오 awk.

    $ awk '{gsub(/"/,""); print $5}' file 
    ADMK05786HTREDIRECT_JA3A
    KOPYUTRCEPORT_JA3A
    ADMK05786HTSRM_JA3A
    ADMK05786HTIAS_JA3A
    ADMK05786HTOTN_JA3A
    ADMK05786HTWPM
    OCAIDEKD_JA3A
    ADMK05786HTSC_JA3A
    
  3. 각 줄에 인용된 문자열을 모두 인쇄하세요.

    $ grep -oP '"\K[^"]+(?=")' file
    ADMK05786HTREDIRECT_JA3A
    KOPYUTRCEPORT_JA3A
    ADMK05786HTSRM_JA3A
    ADMK05786HTIAS_JA3A
    ADMK05786HTOTN_JA3A
    ADMK05786HTWPM
    OCAIDEKD_JA3A
    ADMK05786HTSC_JA3A
    

답변2

grep -o '"[^"]\+"' 

그러면 큰따옴표 사이의 정보가 반환됩니다. 이를 수행하는 더 강력한 방법이 분명히 있지만 데이터가 항상 해당 형식이면 작동하고 이름이 변경되더라도 작동합니다.

관련 정보