/etc/hosts
최소한 다음과 같은 서버를 포함해야 하는 호스트에 대한 파일을 찾고 있습니다 .
mobile.example.com
more.mobile.example.com
example.com 대신
다음과 같은 와일드카드를 사용하여 검색하고 싶습니다.
sed
// awk
// find
/ 단어는 grep
다음 word.word.word < path/to/inputfile > path/to/outputfile
으로 구성됩니다.[A-Z, a-z, 0-9]
이를 위해 "sed", "awk", "find" 또는 "grep" 코드를 작성하세요.
답변1
/etc/hosts
각 IP 주소 항목에는 하나 이상의 호스트 이름이 있을 수 있으므로 각 호스트 이름(즉, 첫 번째 필드를 제외한 모든 항목)을 확인하여 2개 이상의 문자가 포함되어 있는지 확인해야 합니다 .
.
예를 들어:
awk '{for (f=2;f<=NF;f++) {if (split($f,array,/\./)>2) {print;last}}}' /etc/hosts
또는 가독성을 높이기 위해 줄 바꿈 및 들여쓰기를 추가합니다.
awk '
{
for (f=2;f<=NF;f++) {
if (split($f,array,/\./) > 2) {
print;
last;
}
}
}' /etc/hosts
이렇게 하면 리터럴 문자가 2개 이상인 /etc/hosts
호스트 이름이 포함된 모든 줄 이 인쇄됩니다 ..
입력 줄의 각 필드를 반복하고 awk의 기능을 사용하여 split()
문자별로 분할합니다. .
구분 기호로 요소로 분할된 문자열은 항상 구분 기호 수보다 요소가 1개 더 많으므로 > 2
대신 테스트해야 합니다 >= 2
. 예를 들어, "example"에는 그 자체로 요소가 있습니다. "example.com"에는 두 개의 요소("example"과 "com")가 있습니다. "mobile.example.com"에는 3개가 있습니다.
split()
또한 문자열을 배열로 분할하지만 이 작업에서는 반환 값(요소 수)에만 관심이 있고 배열은 무시합니다.
스크립트가 발견되면하나호스트 이름에는 두 개 이상의 .
문자가 포함되어 있으며 전체 줄을 인쇄하고 for 루프에서 벗어나( 사용 last
) 다음 입력 줄로 이동합니다.
답변2
실제로 귀하의 의견을 읽으면 실제로는 호스트 파일이 아니라 도메인 이름 목록이므로 최소한 두 개의 점으로 모든 줄을 필터링하는 것으로 보입니다.
grep '\..*\.' hostfile
도메인이 줄의 시작 부분에 있는 것이 중요한 경우 다음을 사용하세요.
grep '^[[:alnum:]]*\..*\.' hostfile