sed/grep/awk를 사용하여 다른 필드에 TLD가 있는 호스트 이름 목록에서 TLD를 인쇄하는 방법은 무엇입니까?

sed/grep/awk를 사용하여 다른 필드에 TLD가 있는 호스트 이름 목록에서 TLD를 인쇄하는 방법은 무엇입니까?

각 호스트(.com, .net, .info 등)의 TLD를 인쇄하려고 하는 매우 큰 호스트 이름 목록이 있습니다. 문제는 호스트의 TLD가 다른 필드에 있으므로 필드를 정적으로 인쇄하도록 cut 또는 awk에 알릴 수 없다는 것입니다.

일부 호스트 이름 예:

examplehost.net                             # tld is 2nd field (period delimited)
subdomain.otherhost.com                      # tld is 3rd field
subdomain.othersubdomain.yetanotherhost.info   # tld is 4th field

작은 해결 방법으로 각 호스트 끝에 공백을 추가하여 정규식 패턴에 포함하고 grep할 수 있었습니다.

sed 's/$/ /g' listofhosts.txt | grep -Eo '\.[a-z]{1,10} '

이 작업을 수행하는 더 우아한 방법이 있는지 궁금합니다.

답변1

listofhosts.txt 파일이 다음과 같은 경우아니요맨 마지막에 코멘트가 있으니 스틸드라이버의 코멘트 명령을 사용하겠습니다. awk에게 필드를 마침표로 분할한 다음 마지막 필드의 값을 인쇄하도록 지시합니다.

awk -F. '{print $NF}' listofhosts.txt

다음으로 이어진다:

net
com
info

답변2

싱글로grep(만약에폴리 메라 제 연쇠 반응지원됨):

grep -Po '.*\.\K[^.]+$' listofhosts.txt 

답변3

grep -oE '\.[^.]+$'

perl -lne 'print /(\.[^.\s]+)\s/'

sed 's/^[[:space:]]*[^[:space:]]\{1,\}\([.][^.[:space:]]\{1,\}\)[[:space:]]\{1,\}.*/\1/'

관련 정보