regex - 每行一个输出组,带有组名和组 ID
问题描述
这是命令中有关我所属组的信息id
。我已经做到了,所以输出会更容易阅读。我将这个输出“完全”包括在内,因为它是从命令行返回的。(感谢@EdMorton。)
$id
uid=1(me) gid=545(Users) groups=545(Users),66049(CONSOLE LOGON),11(Authenticated Users),4095(CurrentSession),66048(LOCAL)
这是我想要的输出,以逗号分隔,每行有一个组名及其 GID:
$ some-great-command
'Users',545
'CONSOLE LOGON',66049
'Authenticated Users',11
'CurrentSession',4095
'LOCAL',66048
我想出了一个可怕的方法来做到这一点:
$ id | sed 's/\(.*groups=\)\(.*$\)/\2/' | awk -F "," '{ for(i = 1; i <= NF; i++) print $i;}' | sed 's/\(^[[:digit:]]\+\)[(]\([A-Za-z +_]\+\)[)]$/'"'"'\2'"'"',\1/'
(我会用更好的屏幕格式再次把它放在这里,使用\
)
$ id | sed 's/\(.*groups=\)\(.*$\)/\2/' | \
awk -F "," '{ for(i = 1; i <= NF; i++) print $i;}' | \
sed 's/\(^[[:digit:]]\+\)[(]\([A-Za-z +_]\+\)[)]$/'"'"'\2'"'"',\1/'
但我不禁认为必须有更好的(或至少更短更优雅)的方式来完成这个过程。任何人都可以分享这样的解决方案吗?
注意:我这样做的一个原因是,有时getent group GID
我工作的地方有点挑剔。我看过其他一些帖子,例如这个,但它没有我想要的答案。
一个更易读的id
输出版本,与控制台提供的不同!后面有换行符(Users)
(注意右括号后面的空格)和后面(LOCAL),
(逗号后面没有空格)。
$ id
uid=1(me) gid=545(Users)
groups=545(Users),66049(CONSOLE LOGON),
11(Authenticated Users),4095(CurrentSession),66048(LOCAL)
实际id
输出:
$ id
uid=1(me) gid=545(Users) groups=545(Users),66049(CONSOLE LOGON),11(Authenticated Users),4095(CurrentSession),66048(LOCAL)
解决方案
来了perl
:
$ id | perl -pe "s/.*=/,/;s/,(\d+)\(([^)]+)\)/'\2',\1\n/g"
'arobert',1000
'adm',4
'cdrom',24
'sudo',27
'dip',30
'plugdev',46
'lpadmin',113
'sambashare',128
说明:
将执行两个查找和替换命令:
s/.*groups=/,/
用于删除组定义之前的所有内容s/,(\d+)\(([^)]+)\)/'\2',\1\n/g
将采取以下行动详述@demo
写比这更短的东西会很困难。此外,如果您已经擅长sed
and regex
,perl
那么添加到您的技能列表中可能是一个不错的加分项。
正如Ed Morton所提到的,当前命令在输出末尾perl
生成一个额外的。EOL
如果要删除它,可以使用以下增强perl
命令:
$ id | perl -pe "s/.*=/,/;s/,(\d+)\(([^)]+)\)/'\2',\1\n/g;s/\n\n/\n/"
谢谢埃德!!!_
推荐阅读
- android - android 可访问性 dispatchGesture - 是否可以为中风指定压力
- linux - 聚合函数在 postgreSQL 中执行时间过长
- java - 用cheerio从html中提取csrf值
- react-native - 如何更新 FlatList 中的单个项目 - React Native
- python - 我怎样才能让整个网页包含片段网络
- c# - Listview 未绑定初始负载,但适用于 xamarin 表单中的 RefreshCommand
- excel - 在excel中加入字符串而不在每个单元格中手动创建公式
- python - Python 在输出中打印“无”
- r - 在R中的数字序列中查找“哪个数字不是”
- vb.net - 客户端计算机上的 Crystal Report 加载报告失败错误(VB.Net Win Forms)