从shell编辑配置文件的一行

时间:2012-07-30 12:04:35

标签: regex linux bash shell

给定配置文件,例如sshd_config:

[...]
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication yes
X11Forwarding yes
X11DisplayOffset 10
[...]

我想编写一个允许我设置配置设置的命令。例如,我想将PasswordAuthentication设置为no。如果该条目已经存在,我想替换它,如果没有,我想在文件的末尾添加它。

我怎样才能从shell中做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用awk执行此操作。这是我写的脚本:

$ cat setProp.sh
#!/bin/sh

propFile=$1
key=$2
value=$3

awk -v "key=$key" -v "value=$value" '{
    if($1==key) {
        found=1
        print $1" "value
    } else {
        print
    }
}
END {
    if(!found) print key" "value
}' $propFile

用法:

$ setProp.sh myfile RhostsRSAAuthentication no
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication yes
X11Forwarding yes
X11DisplayOffset 10

答案 1 :(得分:0)

awk '{if($1~/PasswordAuthentication/){flag=1;if($2~/yes/)$2="no";print $0}else{print}} END{if(flag!=1)print "PasswordAuthentication no"}' temp