Bash 用单个awk命令替换grep和sed

Bash 用单个awk命令替换grep和sed,bash,awk,sed,Bash,Awk,Sed,因此,我有这行代码,我一直试图转换为一个单独的awk命令,但迄今为止都没有成功(没有显示任何内容)。我对awk不是最有经验的,所以我还在研究它的用法。如果有人能给我一些指导并指出我做错了什么,我将不胜感激。这一行命令将提取所有用户的列表,并删除其周围所有不必要的信息,以仅显示名称列表 ipa group-show ipausers | grep "Member users: | sed "s/,//g" | sed "s/Member users: //g" | sort 我试过几种不同的方法

因此,我有这行代码,我一直试图转换为一个单独的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 name: ipausers
Description: something something
Member users: user1, user2, user3, user4, user5
Member of group: something something
我想展示:

user1 user2 user3 user4 user5
那么这个呢:

awk -F': ' '/Member users:/{print $2}' file
-F:
将行拆分为由
分隔的字段。这样,所有用户名都可以从
$2
获得

awk -F': ' '/Member users:/{gsub(","," ",$2); print $2}' file

更新:

在评论中,您提醒我要删除
。对不起,错过了。根据上述命令,您可以使用
gsub()
$2
中按空格替换

awk -F': ' '/Member users:/{gsub(","," ",$2); print $2}' file
那么这个呢:

awk -F': ' '/Member users:/{print $2}' file
-F:
将行拆分为由
分隔的字段。这样,所有用户名都可以从
$2
获得

awk -F': ' '/Member users:/{gsub(","," ",$2); print $2}' file

更新:

在评论中,您提醒我要删除
。对不起,错过了。根据上述命令,您可以使用
gsub()
$2
中按空格替换

awk -F': ' '/Member users:/{gsub(","," ",$2); print $2}' file

您还可以将其简化为单个(GNU)sed命令:

$ sed -n '/^Member users: /{s///;s/,//gp}' infile
user1 user2 user3 user4 user5
这将阻止使用
-n
打印,然后仅执行以
成员用户开始的行,然后删除该术语(
s///
重复并删除最后一个匹配项)和所有逗号

一个(我认为–未经测试)可以与BSD sed一起使用的版本(末尾加上分号):


您还可以将其简化为单个(GNU)sed命令:

$ sed -n '/^Member users: /{s///;s/,//gp}' infile
user1 user2 user3 user4 user5
这将阻止使用
-n
打印,然后仅执行以
成员用户开始的行,然后删除该术语(
s///
重复并删除最后一个匹配项)和所有逗号

一个(我认为–未经测试)可以与BSD sed一起使用的版本(末尾加上分号):

我可能会:

perl -ne 's/.* users: // && print join " ", split /, /'
剥离行的开头部分,然后在“,”上“拆分”行的其余部分

可以很容易地添加一个排序

perl -ne 's/.* users: // && print join " ", sort split /, /' 
我可能会:

perl -ne 's/.* users: // && print join " ", split /, /'
剥离行的开头部分,然后在“,”上“拆分”行的其余部分

可以很容易地添加一个排序

perl -ne 's/.* users: // && print join " ", sort split /, /' 

你不打印任何东西你不打印任何东西这会删除成员用户:这很好,但是删除逗号怎么样?哦,错过了。给我一分钟。这会删除成员用户:这很好,但是删除逗号怎么样?哦,错过了。给我一分钟。在这种情况下使用
sed
awk
有好处吗?回答得不错+“从我这里得到1。@EdMorton删除了重复的正则表达式。在本例中使用
sed
awk
有好处吗?”?回答得不错+“从我这里取1。”埃德蒙顿删除了重复的正则表达式。