私はレジストラ情報をドメインの 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 に追加しました。また、2 番目の「registrar's sponsorship...」などを削除する方法も見つけたいと思っています。
文字列を検出してその行を含めないようにすることは可能ですか? ありがとうございます
答え1
もう 1 つのオプションは、grep の対象をより具体的に指定することです。例:
whois stackoverflow.com | grep -E '^[[:space:]]*(Registr(ar|ant|y)|Sponsoring).*: '
これは、「Registrar」、「Registrant」、「Registry」、または「Sponsoring」の前にオプションの空白で始まり、その後に任意の数 (0 個以上) の任意の文字が続き、その後にコロンとスペースが続く行のみを抽出します。
(ちなみに、これはgrep -E
廃止され非推奨となった ではなくを使用します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 サーバーなどのリモート ソースなど) からのテキストに対して、あらゆる形式のテキスト処理 (正規表現を含む) をテストする場合、slow コマンドを 1 回実行して出力をファイルにリダイレクトし、そのファイルに対してテストすると便利です。目的の結果が得られたら、直接パイプされた (新しい) データでも同じように動作することを確認してください。
例えば
whois stackoverflow.com > so.txt
whois
出力に関するその他の便利な機能:
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
「ドメイン名」フィールドで始まり、「レジストラ不正使用連絡先電話番号」フィールドで終わる登録者ブロックを抽出します。
sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p' so.txt
上記の両方を組み合わせた場合:
sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p /^[[:blank:]]+.*:[[:blank:]] /p'
上記のすべての出力は、フィールド区切り文字として
awk
コロン ( ) 文字を使用できるその他のテキスト処理ツールを使用して簡単にさらに処理できます。:
答え2
-v フラグを使用します:
reg=`whois stackoverflow.com | egrep -i 'Registrar|Sponsoring Registrar|Registrant' | grep -v internic`