在/ etc / group文件中对组成员进行排序的最佳方法是什么?
e.g。
tomcat::201:root,tux23,alex
ftp::66000:tom,alex,mike
我需要以下输出:
tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom
提前致谢, TUX
答案 0 :(得分:2)
您可以使用perl one liner对每行的用户名进行排序,
perl -pe 's|([^:\n]+)$| join ",", sort split /,/, $1 |e' /etc/group
输出
tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom
答案 1 :(得分:0)
以下是基于awk
的解决方案:
awk -F: '{ split($4, a, ",");
n = asort(a);
s = a[1];
for(i = 2; i <= n; ++i) { s = s "," a[i] }
print $1":"$2":"$3":"s
}' /etc/group
答案 2 :(得分:0)
另一个Perl单行:
perl -F: -lape 's#$F[3]#join ",",sort split /,/,$F[3]#e' /etc/group
或
perl -F: -lane 'print join ":",@F[0..2],join ",",sort split /,/,$F[3]' /etc/group
答案 3 :(得分:0)
另一个perl one liner:
perl -ne 'if (/(.*:\d+:)(.*)/) {print $1.join(",",sort(split(/,/,$2)))."\n";}' /etc/group