редактирование и обработка файлов awk или perl - PullRequest
1 голос
/ 09 апреля 2010

У меня есть стандартный файл passwd и файл пользовательской карты, который сопоставляет имя unix (например, jbloggs) с именем учетной записи AD (например, bloggsjoe) в формате:
jbloggs bloggsjoe
Джеймс Смитджон
... и т. д.
Как я могу отредактировать файл passwd, чтобы заменить исходное имя unix именем учетной записи AD, чтобы вместо каждой строки файла passwd было имя учетной записи AD.
Цени любую помощь для изучающего Perl.

Ответы [ 4 ]

1 голос
/ 09 апреля 2010
#! /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";
    }
}
0 голосов
/ 09 апреля 2010

Использование Passwd::Unix. Он будет координировать редактирование файлов / etc / passwd, / etc / shadow и / etc / group для вас. Обязательно сделайте резервную копию этих файлов, прежде чем пытаться их редактировать.

0 голосов
/ 09 апреля 2010

Вот один лайк, чтобы сделать это

$ 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
0 голосов
/ 09 апреля 2010

С помощью 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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...