와일드카드 문자가 포함된 텍스트 찾기 [닫기]

와일드카드 문자가 포함된 텍스트 찾기 [닫기]

/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

관련 정보