Bash

如何向我的 grep 腳本添加過濾器以不包含字元串?

  • May 21, 2016

我正在研究一個腳本,它將註冊商資訊與域 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.

我在我的 grep 中添加了一些虛擬碼來嘗試排除字元串“internnic”,以便剪掉第一行。我還想找到一種方法來刪除輔助“註冊商的讚助……”等。

是否可以檢測到字元串而不包含該行?謝謝

另一種選擇是更具體地了解您正在尋找的內容。例如:

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

這僅提取在“Registrar”、“Registrant”、“Registry”或“Sponsoring”之前以可選空格開頭的行,後跟任意數量(零個或多個)的任意字元,後跟冒號和空格。

(順便說一句,這使用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: sysadmin-team@stackoverflow.com 
Registry Admin ID:  
Registry Tech ID:  
Registrar Abuse Contact Email: abuse@name.com 
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. 提取 Registrant 塊,以“域名”欄位開頭並以“註冊商濫用聯繫電話”欄位結尾:

sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p' so.txt 3. 以上兩者一起:

sed -n -e '/^Domain Name:/,/^Registrar Abuse Contact Phone:/p /^[[:blank:]]+.*:[[:blank:]] /p' 4. 以上所有內容的輸出都可以很容易地使用awk或任何其他可以使用冒號 ( :) 字元作為欄位分隔符的文本處理工具進行進一步處理。

引用自:https://unix.stackexchange.com/questions/284473