對/ etc/group文件中的組成員進行排序的最佳方式是什麼?Shell或Perl腳本/如何在/ etc/group中對組成員進行排序?
例如
tomcat::201:root,tux23,alex
ftp::66000:tom,alex,mike
我需要以下的輸出:提前
tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom
感謝, 禮服
對/ etc/group文件中的組成員進行排序的最佳方式是什麼?Shell或Perl腳本/如何在/ etc/group中對組成員進行排序?
例如
tomcat::201:root,tux23,alex
ftp::66000:tom,alex,mike
我需要以下的輸出:提前
tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom
感謝, 禮服
您可以使用Perl一個襯墊在每行上排列用戶名,
perl -pe 's|([^:\n]+)$| join ",", sort split /,/, $1 |e' /etc/group
輸出
tomcat::201:alex,root,tux23
ftp::66000:alex,mike,tom
這裏是基於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
另一個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
另一個perl的一個襯裏:
perl -ne 'if (/(.*:\d+:)(.*)/) {print $1.join(",",sort(split(/,/,$2)))."\n";}' /etc/group
你想用這個做什麼?你能提供一些更多的細節。可能會有一些選擇! – 2014-09-30 10:14:36