>

/etc/hosts 파일에서 읽고 호스트 파일에서 사용 가능한 IP를 결정하는 스크립트를 작성하고 있습니다.

호스트 파일의 모양은 다음과 같습니다 :

172.17.164.2 System1
172.17.164.3 System2
172.17.164.4 System3
172.17.164.5 System4
172.17.164.6 System5
172.17.164.7
172.17.164.8
172.17.164.9
172.17.164.10

제 질문은 각 줄을 읽고 두 번째 필드가 없는지 어떻게 확인합니까? hosts 파일에 호스트 이름이 없으면 IP를 사용할 수 있다는 의미입니다.

  • 답변 # 1

    awk 를 사용할 수 있습니다  (태그에서 제안한대로), 주어진 레코드의 필드 수가 1인지 확인합니다. "무료"주소 목록을 얻으려면 :

    awk '(NF == 1) { print; }' </etc/hosts
    
    

    당신의 /etc/hosts 경우 너무 간단 할 수 있습니다  파일에 주석이 포함되어 있습니다. 주석 행을 건너 뛰어이를 필터링 할 수 있습니다.

    awk '/^#/ { next; } (NF == 1) { print; }' </etc/hosts
    
    

    awk  스크립트는 패턴 (또는 조건)과 동작 쌍입니다.

    첫 번째 스크립트에서 awk   NF 를 확인  — 줄의필드수 (기본적으로 공백으로 구분됨)이며 한 줄로 각 줄을 인쇄합니다.

    두 번째 스크립트는 /etc/hosts 의 문제를 해결합니다  "#"로 시작하는 행을 확인하고 해당 행의 추가 처리를 생략하여 주석이있는 파일 ( next 로 건너 뛰어)  

  • 답변 # 2

    주어진 데이터에 대해 grep -v System /etc/hosts 를 사용할 수 있습니다 .

    보다 일반적인 해결책은 egrep -v "\S+\s+\S+" /etc/hosts 를 사용하십시오. 은 공백이 아닌 것을 포함하지 않고 공백이 아닌 것을 포함하는 행을 보여줍니다 (예 : 공백이 아닌 것). 적어도 두 단어.

  • 이전 security - 유닉스 기반 운영 체제에서 커널 모듈 설치 기능을 비활성화하는 방법은 무엇입니까?
  • 다음 cat - bash 변수에 이미지 파일을 저장하는 방법은 무엇입니까?