/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
(등.)