文字列を除外するためにgrepスクリプトにフィルタを追加するには?

文字列を除外するためにgrepスクリプトにフィルタを追加するには?

ドメイン名whoisから登録者情報を分離するスクリプトを作成しています。これまでは十分に機能していますが、よりきれいにするためにいくつかのことを削除したいと思います。ほとんどのドメインで動作します。これは私のコードです。

#!/bin/bash
reg=$(whois "stackoverflow.com" | egrep -i 'Registrar|Sponsoring Registrar|Registrant|!internic')
printf "Below is my best attempt at finding the Registrar info:\n"
printf "$reg\n"

出力は次のとおりです。

Below is my best attempt at finding the Registrar info:
with many different competing registrars. Go to http://www.internic.net
   Registrar: NAME.COM, INC.
   Sponsoring Registrar IANA ID: 625
registrar's sponsorship of the domain name registration in the registry is
date of the domain name registrant's agreement with the sponsoring
registrar.  Users may consult the sponsoring registrar's Whois database to
view the registrar's reported date of expiration for this registration.
Registrars.

最初の行が切り捨てられるように、文字列 "internnic"を除外するためにgrepにいくつかの疑似コードを追加しました。また、二次的な「登録者の後援…」などを削除する方法も探したいと思います。

行を含めずに文字列を検出できますか?ありがとう

答え1

別のオプションは、探しているものをより具体的に説明することです。たとえば、

whois stackoverflow.com | grep -E '^[[:space:]]*(Registr(ar|ant|y)|Sponsoring).*: '

これにより、「Registrar」、「Registrant」、「Registry」、または「Sponsoring」の前にオプションのスペースで始まり、その後にランダムな数字(0個以上)の文字が続き、その後にコロンとスペースが続く行のみが抽出されます。

(ところで、これはgrep -Eobsoleteとdeprecatedの代わりに使用されますegrep。彼らは同じことをします。)

出力:

   Registrar: NAME.COM, INC.
   Sponsoring Registrar IANA ID: 625
Registry Domain ID: 108907621_DOMAIN_COM-VRSN 
Registrar WHOIS Server: whois.name.com 
Registrar URL: http://www.name.com 
Registrar Registration Expiration Date: 2016-12-26T19:18:07Z 
Registrar: Name.com, Inc. 
Registrar IANA ID: 625 
Registry Registrant ID:  
Registrant Name: Sysadmin Team 
Registrant Organization: Stack Exchange, Inc. 
Registrant Street: 110 William St , Floor 28 
Registrant City: New York 
Registrant State/Province: NY 
Registrant Postal Code: 10038 
Registrant Country: US 
Registrant Phone: +1.2122328280 
Registrant Email: [email protected] 
Registry Admin ID:  
Registry Tech ID:  
Registrar Abuse Contact Email: [email protected] 
Registrar Abuse Contact Phone: +1.1 7203101849 

ただし、データベースクエリなどの低速ソース、またはwhoisやhttpサーバーなどのリモートソースからのテキストに対してすべての形式のテキスト処理(正規表現を含む)をテストするときは、遅いコマンドを一度実行して出力をファイルにリダイレクトします。次に、そのファイルについてテストします。必要なものがあれば、データを直接パイプするのと同じ方法で動作することを確認してください。

例えば

whois stackoverflow.com > so.txt

出力に関連する他の有用なタスクwhois

  1. whosで始まるドメインブロックを抽出します(ドメイン行は4つのスペースで始まり、コロンで終わります)。

    grep -Ei '^[[:blank:]]+.*:[[:blank:]]' so.txt

出力:

   Domain Name: STACKOVERFLOW.COM
   Registrar: NAME.COM, INC.
   Sponsoring Registrar IANA ID: 625
   Whois Server: whois.name.com
   Referral URL: http://www.name.com
   Name Server: CF-DNS01.STACKOVERFLOW.COM
   Name Server: CF-DNS02.STACKOVERFLOW.COM
   Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
   Updated Date: 26-nov-2015
   Creation Date: 26-dec-2003
   Expiration Date: 26-dec-2016
  1. 「ドメイン名」フィールドで始まり、「登録機関乱用連絡先」フィールドで終わる登録者ブロックを抽出します。

    sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p' so.txt

  2. 上記の2つの項目を一緒に追加します。

    sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p /^[[:blank:]]+.*:[[:blank:]] /p'

  3. 上記のすべての結果は、コロン()文字をフィールド区切り文字として使用できる他のテキストawk処理ツールを使用して簡単に処理できます。:

答え2

-v フラグを使用します。

reg=`whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic`

関連情報