이상한 형식의 권한 구문 분석

이상한 형식의 권한 구문 분석

나는 짧은 bash 파서를 만들고 여러 줄에서 3가지를 추출하여 새로 형식이 지정된 변수에 넣으려고 합니다. 형식은 다음과 같습니다.

ownername:read write execute groupname:read execute all:none  sticky

각 부분을 다음과 같은 변수에 넣으려고 합니다.

소유자(첫 번째 블록)

OWNER=$(ownername)

그룹(두 번째 블록)

GROUP=$(groupname)

마지막으로 권한(소유자 이름/그룹 이름을 제외한 모든 블록이 소유자 및 기본 그룹으로 대체됨)

PERMISSIONS=$(owner:read write execute primary_group:read execute all:none sticky)

처음에는 매우 간단한 작업처럼 보였지만 일부 영역은 rwx이고 다른 영역은 rw/ro일 수 있고 소유자/그룹이 고유하지 않기 때문에 기본 awk 지식으로 이 문제를 해결하는 것이 어려웠습니다(간단한 sed는 허용되지 않음) )

이 문제를 해결하려면 어떤 초기 단계를 수행해야 합니까?

더 명확하게 말하자면:

입력하다:

ownername:read write execute groupname:read execute all:none  sticky

산출:

OWNER=ownername
GROUP=groupname
PERMISSIONS=owner:read write execute primary_group:read execute all:none  sticky

답변1

입력을 단일 단어, 콜론 및 기타 단어가 포함된 부분으로 분할하고 싶다고 생각합니다. 섹션을 분리하면 더 쉬울 수 있지만 예를 들어 다음과 같은 구분 기호를 추가할 수 있습니다.

echo "ownername:read write execute groupname:read execute all:none  sticky" | \
   sed -e 's/\w\w*:/;&/g'
;ownername:read write execute ;groupname:read execute ;all:none  sticky

세미콜론으로 나누면 작동합니다.

부품을 배열로 직접 분할하는 데 필요한 Perl 조각:

echo "ownername:read write execute groupname:read execute all:none  sticky" | \
  perl -ne '@a = split/ (?=\w+:)/; print "$_\n" for @a'
ownername:read write execute
groupname:read execute
all:none  sticky

관련 정보