사용자 이름 가이드를 설정하는 awk 명령

사용자 이름 가이드를 설정하는 awk 명령

/etc/passwd에서 읽은 사용자 이름이 특정 지침을 따르지 않는 경우 오류 메시지를 인쇄하는 awk 명령을 찾고 있습니다. 지침은 다음과 같습니다. 필드는 문자로 시작해야 하며 최대 8개의 문자, 숫자, 밑줄, 하이픈 및 점을 포함할 수 있습니다. 사용자 이름이 8자를 넘지 않는지 확인했지만 명령을 실행하는 데 문제가 있습니다. 즉, 문자, 숫자, 밑줄, 하이픈 및 점만 사용할 수 있습니다.

현재 코드:

{if (length($1) >= 9) print "Error: The username has too many characters on line " NR}
{if ($1 != [a-z]) print "Error"}  //Here is where I need the command.

if 문이 여러 개 필요합니까? 그렇다면 적절한 awk 문을 찾는 데 도움을 주실 수 있나요?

감사해요

답변1

가장 쉬운 방법은 사용자 이름에 대한 조건당 하나의 테스트를 수행하는 것입니다. 이를 통해 진행 상황을 쉽게 확인할 수 있으며 수정 및 확장도 쉽습니다. 단일 정규식은 금방 너무 다루기 어려워질 수 있습니다.

/^[^a-z]/      { printf("Does not start with a letter:\t%s\n", $0)   }
length > 8     { printf("Longer than 8 characters:\t%s\n", $0)       }
/[^a-z0-9_.-]/ { printf("Contains disallowed characters:\t%s\n", $0) }

여기서 주목할 점은 -마지막 테스트의 대시( )입니다. 의 첫 번째 또는 마지막이어야 합니다 [...].

다음의 사용자 이름을 사용하여 awk 스크립트를 제공합니다 /etc/passwd.

$ cut -d ':' -f 1 /etc/passwd | awk -f usernamecheck.awk
Does not start with a letter:   _portmap
Does not start with a letter:   _identd
Does not start with a letter:   _rstatd
Does not start with a letter:   _rusersd
Does not start with a letter:   _fingerd
Does not start with a letter:   _x11
Does not start with a letter:   _switchd
Does not start with a letter:   _traceroute
Longer than 8 characters:       _traceroute

(등.)

관련 정보