所以我有这行代码,我一直试图转换为只有一个awk命令,但到目前为止一直没有成功(没有显示)。我不是awk
最有经验的人,所以我仍然在研究它的用途。如果有人能给我一些指导并指出我做错了什么,我将不胜感激。这个单行命令将拉出所有用户的列表,并删除它周围的所有不必要的信息,只显示一个名称列表。
ipa group-show ipausers | grep "Member users: | sed "s/,//g" |
sed "s/Member users: //g" | sort
我尝试了几种不同的方法,但我尝试过的最新方法是
ipa group-show | awk '/Member users/ { sub ("Member users: ", "") }'
这什么都没显示......
根据我的理解,awk能够很容易地搜索和删除多余的文本,并且对于我想要实现的内容将是一个可靠的用例。我只是无法完成我正在尝试的事情。引出了几个问题......将grep
和sed
替换为awk
的理想情况,或grep
和sed
是否应该使用awk
和ipa group-show
这个案例?我对Group name: ipausers
Description: something something
Member users: user1, user2, user3, user4, user5
Member of group: something something
做错了什么(可能很多我肯定哈哈)。
来自user1 user2 user3 user4 user5
Icon
我想展示:
TextIcon
答案 0 :(得分:3)
这个怎么样:
awk -F': ' '/Member users:/{print $2}' file
-F:
将该行拆分为:<space>
分隔的字段。这样,所有用户名都可以从$2
获得。
更新
在评论中,您提醒我您也要删除,
。对不起,错过了。根据以上命令,您可以使用gsub()
将,
替换为$2
中的空格。
awk -F': ' '/Member users:/{gsub(","," ",$2); print $2}' file
答案 1 :(得分:1)
您还可以将其缩减为单个(GNU)sed命令:
$ sed -n '/^Member users: /{s///;s/,//gp}' infile
user1 user2 user3 user4 user5
这会阻止使用-n
打印,然后仅处理以Member users
开头的行,然后删除该术语(s///
重复并删除最后一个匹配项)和所有逗号。
一个版本(我认为 - 未经测试)可以与BSD sed一起使用(最后用分号分隔):
sed -n '/^Member users: /{s///';'s/,//gp;}' infile
答案 2 :(得分:1)
我可能会这样做:
perl -ne 's/.* users: // && print join " ", split /, /'
剥去该行的前导部分,然后在“,”
上“拆分”该行的其余部分可以在那里轻松添加排序
perl -ne 's/.* users: // && print join " ", sort split /, /'