문자열을 포함하지 않도록 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 -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 서버와 같은 원격 소스)의 텍스트에 대한 모든 형태의 텍스트 처리(정규식 포함)를 테스트하는 동안 느린 명령을 한 번 실행하고 출력을 다음으로 리디렉션하는 것이 유용합니다. 그런 다음 파일에 대해 테스트합니다. 원하는 것이 있으면 직접 파이프된(신선) 데이터에서도 동일하게 작동하는지 확인하세요.

예를 들어

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`

관련 정보