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