解析格式奇怪的权限

解析格式奇怪的权限

我正在制作一个简短的 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)

起初这似乎是一个非常简单的任务,但是,尝试用我的基本 awk 知识来解决这个问题很困难,因为某些区域可能是 rwx,而其他区域可能是 rw/ro,以及所有者/组不是唯一的(不允许简单的 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

相关内容