我是脚本新手。我需要在多个服务器上安排作业,然后在sudoers文件中的正确位置插入NOPASSWD。条件是跳过存在PASSWD和存在车轮的行。
我在awk以下成功提取了与我的表达式匹配的行,但是在使用sed的情况下,我无法插入或替换所需的行。
awk '($1 ~ "%" && !/PASSWD/ && !/wheel/) {print}' sudoers
Sed:
sed '/NOPASSWD/b; s/ALL\=\(ALL\)[[:space:]].* ALL/ALL\=\(ALL\)[[:space:]].*NOPASSWD\: ALL/g' sudoers
不起作用,并且如果命令不同于ALL,也无济于事。
现有:-
%<<group 1>> ALL=(ALL) /bin/su - oracle12
%<<group 2>> ALL=(ALL) ALL
预期:-
%<<group 1>> ALL=(ALL) NOPASSWD: /bin/su - oracle12
%<<group 2>> ALL=(ALL) NOPASSWD: ALL
我们非常感谢您的帮助。如果还有其他线程解决了类似问题,请重定向我。
答案 0 :(得分:1)
您现有的awk命令稍作修改似乎就可以了:
$ awk '($1 ~ "%" && !/PASSWD/ && !/wheel/) {$2 = $2 FS "NOPASSWD:"; print }' sudoers
答案 1 :(得分:0)
感谢Gupta ...问题已解决。
下面的是实现Job的脚本。让我知道是否有人需要解释。
awk'($ 1〜“%” &&!/ PASSWD / &&!/ wheel /){$ 2 = $ 2 FS“ NOPASSWD:”;打印}'/ etc / sudoers> / tmp / temp_sudoers
边读边
做
第一= echo $Line | cut -d' ' -f1
; sed -i“ s?^ $ {First}。*?$ {Line}?g” / etc / sudoers
完成
@gupta再次谢谢你。