私のデータ:
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
キュー内の場所を使用します。私たちは常にスペースで区切られた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
各行に引用した文字列をすべて印刷します。
$ grep -oP '"\K[^"]+(?=")' file ADMK05786HTREDIRECT_JA3A KOPYUTRCEPORT_JA3A ADMK05786HTSRM_JA3A ADMK05786HTIAS_JA3A ADMK05786HTOTN_JA3A ADMK05786HTWPM OCAIDEKD_JA3A ADMK05786HTSC_JA3A
答え2
grep -o '"[^"]\+"'
これにより、二重引用符間の情報が返されます。これを行うより強力な方法は明らかですが、データが常にその形式である場合は機能し、名前が変更されても機能します。