나는 짧은 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