"컷" ID 출력

"컷" ID 출력

id 명령의 출력을 세 부분으로 "잘라내는" 스크립트를 작성해야 합니다. 예를 들어:

id가 다음과 같은 출력을 제공한다고 가정합니다.uid=12345(mylogin) gid=100(users)

내 스크립트는 다음과 같이 출력되어야 합니다.

Login: mylogin
Id: 12345
Group: users

답변1

굳이 분석하지 마세요. POSIX필요id이를 자동화하기 위해 다양한 옵션이 지원됩니다 .

printf "Login: %s\nId: %s\nGroup: %s\n" "$(id -un)" "$(id -u)" "$(id -gn)"

더 많은 작업이 필요할 뿐만 아니라 id로캘 종속 출력을 생성하는 옵션이 허용되지 않기 때문에 구문 분석도 복잡합니다.

LC_MESSAGES 로케일 클래스가 POSIX 로케일을 지정하는 경우 다음 형식을 사용해야 합니다.다른 로케일에서는 uid, gid, euid, egid 및 groups 문자열을 로케일에 해당하는 보다 적절한 문자열로 대체할 수 있습니다.

가장 합리적인 구문 분석 도구로 이 문제를 처리할 수 있지만 유니코드를 지원하지 않는 도구는 문제를 일으킬 가능성이 높습니다.

답변2

여러 문자 필드 구분 기호 사용awk

$ echo 'uid=12345(mylogin) gid=100(users)' | awk -F'[=()]' '{print "Login: " $3 "\nId: " $2 "\nGroup: " $6}'
Login: mylogin
Id: 12345
Group: users
  • -F'[=()]'=또는 필드 구분 기호 (로 설정)
  • $3첫 번째 필드 다음의 세 번째 필드가 되며 =첫 번째 필드 (로 끝납니다 ). 이런 식으로 우리는 가치를 얻습니다.mylogin
  • 다른 필드는 동일하며 필요에 따라 인쇄됩니다.

답변3

한 가지 접근 방식은 다음과 같습니다.

# 0 |  1  |   2   |  3 | 4 |  5  |
#uid=12345(mylogin) gid=100(users)
IFS='(=)' read -a A <<<"$(id)"
printf '%s: %s\n' Login "${A[2]}" Id "${A[1]}" Group "${A[5]}"
# remember array A indexing begins at 0.

답변4

말 그대로 다음을 사용하십시오 cut.

echo Login: $(id | cut -d ' ' -f1 | cut -d= -f2 | cut -d '(' -f1)
echo Id: $(id | cut -d ' ' -f1 | cut -d= -f2 | cut -d '(' -f2 | cut -d  ')' -f1)
echo Group: $(id | cut -d ' ' -f2 | cut -d '(' -f2 | cut -d ')' -f1)

관련 정보