내 데이터:
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
몇 가지 다른 방법:
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
또는
grep
Perl 호환 정규식 지원(-P
) 을 사용하십시오.주위를 둘러보세요:$ grep -oP '(?<=host ").+?(?=" is )' file ADMK05786HTREDIRECT_JA3A KOPYUTRCEPORT_JA3A ADMK05786HTSRM_JA3A ADMK05786HTIAS_JA3A ADMK05786HTOTN_JA3A ADMK05786HTWPM OCAIDEKD_JA3A ADMK05786HTSC_JA3A
대기열에서 위치를 사용하십시오. 우리는 항상 공백으로 구분된 다섯 번째 필드를 원한다고 가정합니다.
$ 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
각 줄에 인용된 문자열을 모두 인쇄하세요.
$ grep -oP '"\K[^"]+(?=")' file ADMK05786HTREDIRECT_JA3A KOPYUTRCEPORT_JA3A ADMK05786HTSRM_JA3A ADMK05786HTIAS_JA3A ADMK05786HTOTN_JA3A ADMK05786HTWPM OCAIDEKD_JA3A ADMK05786HTSC_JA3A
답변2
grep -o '"[^"]\+"'
그러면 큰따옴표 사이의 정보가 반환됩니다. 이를 수행하는 더 강력한 방법이 분명히 있지만 데이터가 항상 해당 형식이면 작동하고 이름이 변경되더라도 작동합니다.