如何向我的 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.
我在我的 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
與輸出有關的其他有用的事情:
- 在 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
- 提取 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
或任何其他可以使用冒號 (:
) 字元作為欄位分隔符的文本處理工具進行進一步處理。