在不存在的sudoers中的正确位置插入NOPASSWD字符串

时间:2019-04-05 07:25:48

标签: sed

我是脚本新手。我需要在多个服务器上安排作业,然后在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

我们非常感谢您的帮助。如果还有其他线程解决了类似问题,请重定向我。

2 个答案:

答案 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再次谢谢你。