奇妙な形式の権限の解析

奇妙な形式の権限の解析

私は短いbashパーサーを作成し、いくつかの行から3つを抽出して、新しくフォーマットされた変数に入れようとしています。形式は次のとおりです。

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

各部分を次の変数に入れようとします。

所有者(最初のブロック)

OWNER=$(ownername)

グループ(2番目のブロック)

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

おすすめ記事