我有一个标准的passwd文件&用户地图文件 - 以以下格式映射unix名称(例如jbloggs)和AD帐户名称(例如bloggsjoe):
jbloggs bloggsjoe
jsmith smithjohn
......等
如何编辑passwd文件以将原始unix名称与AD帐户名交换,因此passwd文件的每一行都有AD帐户名。
感谢perl学习者的任何帮助。
答案 0 :(得分:1)
#! /usr/bin/perl -T
use strict;
use warnings;
use File::Slurp 'slurp';
my ($map_file, $pass_file) = @ARGV or die 'No arguments given!';
my %ad_for;
for my $line (slurp($map_file)) {
chomp $line;
my ($unix, $ad) = split / /, $line;
$ad_for{$unix} = $ad;
}
for my $line (slurp($pass_file)) {
my ($name, @entries) = split /:/, $line;
if ($ad_for{$name}) {
print join ':', $ad_for{$name}, @entries;
}
else {
warn "name $name doesn't have an ad entry\n";
}
}
答案 1 :(得分:0)
使用Perl,读取AD文件并填充AD-Unix哈希值,然后您可以使用它来执行单行替换。当然,这假设您没有重复的用户名。
(未测试的)
my %AD;
system ("perl -ane '$AD{$F[0]} = $F[1]' unixMap.txt");
system ("perl -i -ape 's/$F[0]/$AD{$F[0]}/' passwordFile.txt");
答案 2 :(得分:0)
这是一个很难做的事情
$ cat map.txt
jbloggs bloggsjoe
jsmith smithjohn
$ cat passwd
root:x:0:0:root:/root:/bin/bash
jbloggs:x:493:484:Blogger:/var/run/lib:/sbin/nologin
jsmith:x:27:481:MySQL Server user:/var/lib/mysql:/bin/bash
$ awk -F":" 'FNR==NR{gsub(" +",":");m[$1]=$2;next}($1 in m){$1=m[$1]}1' OFS=":" map.txt passwd
root:x:0:0:root:/root:/bin/bash
bloggsjoe:x:493:484:Blogger:/var/run/lib:/sbin/nologin
smithjohn:x:27:481:MySQL Server user:/var/lib/mysql:/bin/bash
答案 3 :(得分:0)
使用Passwd::Unix
。它将为/ etc / passwd,/ etc / shadow和/ etc / group coordinate the editing。在尝试编辑之前,请务必备份这些文件。