문자열을 제외하기 위해 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에 일부 의사 코드를 추가했습니다. 또한 2차적인 "등록자의 후원..." 등을 제거하는 방법도 찾고 싶습니다.

줄을 포함하지 않고 문자열을 감지할 수 있습니까? 감사해요

답변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. 위의 두 항목을 함께 추가합니다.

    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`

관련 정보