각 호스트(.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/'