Bash 用单个awk命令替换grep和sed
因此,我有这行代码,我一直试图转换为一个单独的awk命令,但迄今为止都没有成功(没有显示任何内容)。我对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
不是最有经验的,所以我还在研究它的用法。如果有人能给我一些指导并指出我做错了什么,我将不胜感激。这一行命令将提取所有用户的列表,并删除其周围所有不必要的信息,以仅显示名称列表
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。”埃德蒙顿删除了重复的正则表达式。