발굴 출력에서 ​​A 레코드 및 쿼리 시간을 추출합니다.

발굴 출력에서 ​​A 레코드 및 쿼리 시간을 추출합니다.

dig 명령을 실행하면 다음과 같은 출력이 표시됩니다.

dig @1.1.1.1 google.com  +noall +answer +stats

; <<>> DiG 9.11.4-P1 <<>> @1.1.1.1 google.com +noall +answer +stats
; (1 server found)
;; global options: +cmd
obodrm.prod.at.dmdsdp.com. 86154 IN     A       62.178.85.125
;; Query time: 1 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Wed Sep 11 15:04:35 CEST 2019
;; MSG SIZE  rcvd: 70

다음 "62.178.85.125"와 쿼리 시간 1ms를 필터링하여 한 줄에 표시하고 싶습니다.

답변1

awk를 사용하면 가능한 패턴에 따라 정확한 일치 기준을 조정하는 것이 매우 쉽습니다.

dig @1.1.1.1 google.com  +noall +answer +stats | \
  awk '$3 == "IN" && $4 == "A"{ip=$5}/Query time:/{t=$4 " " $5}END{print ip, t}'

답변2

그렙을 사용하여,

dig @1.1.1.1 google.com  +noall +answer +stats | grep -oEe "\b([0-9]{1,3}\.){3}[0-9]{1,3}$" -oEe 'Query time: [0-9]+ msec'
  • -oEe "\b([0-9]{1,3}\.){3}[0-9]{1,3}$"줄 끝에서 IP 주소를 검색합니다.

  • -oEe 'Query time: [0-9]+ msec'grep 쿼리 시간.

답변3

GNU 사용 sed:

dig @1.1.1.1 google.com  +noall +answer +stats | \
  sed -nEz 's/.*[[:space:]]([0-9.]+)\n;; (Query time[^\n]*\n).*/\1 \2/p'

sed옵션 을 사용하면 -z입력이 하나의 큰 문자열로 처리되고 옵션은 -n일치하는 부분( /p)만 인쇄합니다. IP 주소 뒤에는 개행 문자와 가 오기 때문에 ;; Query time더 간단한 정규식을 사용하여 IP를 일치시킬 수 있습니다. 두 문자열 모두 그룹으로 캡처되며 (…)입력은 그룹을 참조하여 대체됩니다.\1 \2

관련 정보