Solaris“干净”组文件(或任何文本文件)

Solaris“干净”组文件(或任何文本文件)

我正在寻找一种方法来对大量服务器上的 /etc/group 文件编写清理操作脚本。多次查找特定组中的用户。

即 somegroup::100000:userA、userB、userC、foo、bar、snafu、userB、userB

显然,对于一个小团体来说,这很容易,并且可以手动完成,但我有一些包含大量组和条目的组文件。

我考虑过用 java 编写它,因为它应该很容易,但我更喜欢在 perl 或 shell 中找到一些东西。

谢谢!

肖恩

答案1

这是一个 Perl 脚本来完成它。

while (<>) {
    chomp;
    my ($name, $pass, $gid, $users) = split ':';
    my %userset;
    my @users = split ',', $users;
    # create a set (a hash with undef keys) by assigning to hash slice
    @userset{@users} = ();
    $users = join ',', sort(keys(%userset));
    print join(':', $name, $pass, $gid, $users). "\n";
}

像这样使用它:

$ ./fixgroups <group >group.tmp
$ diff -u group group.tmp
-somegroup::100000:userA,userB,userC,foo,bar,snafu,userB,userB
+somegroup::100000:bar,foo,snafu,userA,userB,userC
$ mv group.tmp group

相关内容