나는 /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
제 질문은 각 행을 어떻게 읽고 두 번째 필드가 누락되었는지 확인하는 것입니다. 호스트 파일에 호스트 이름이 없으면 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
공백이 아닌 문자, 공백, 공백 이외의 단어(예: 최소 두 단어)가 포함되지 않은 줄을 표시하는 것을 의미합니다.