次の詳細を取得するには、コマンドまたは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. キュー内の場所を使用します。私たちは常にスペースで区切られた5番目のフィールドが欲しいとします。

    $ 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 '"[^"]\+"' 

これにより、二重引用符間の情報が返されます。これを行うより強力な方法は明らかですが、データが常にその形式である場合は機能し、名前が変更されても機能します。

関連情報