我想将以下行添加到/etc/my.cnf
服务器-ID = 1789051
该线可能存在也可能不存在。 如果它在那里,通常是server-id = 1 如果我的IP是192.178.90.51,那么服务器ID应该是1789051
我想知道shell脚本或命令是否可以执行此操作。
答案 0 :(得分:1)
sed --in-place --expression='$aserver-id=1789051' --expression='/^server-id=/d' \
/etc/my.cnf
答案 1 :(得分:1)
这将替换文件中相同位置的行(如果存在),而不是将其移动到最后。如果它不存在,它会将它附加到文件的末尾。
sed '1{x;s/^$/server-id=1789051/;x};/^server-id=/{s/^.*$//;x};${G;s/\n//}' /etc/my.cnf
答案 2 :(得分:0)
使用awk的一种方式
#!/bin/bash
ip=1.2.3.4
awk -v ip="$ip" '/server-id/{
$0="server-id="ip;f=0
f=1
g=1
}
{print}
END{
if(g==0){ print "server-id="ip }
}' file
当有“server-id”时输出
$ more file
1
2
server-id=1
end
$ ./shell.sh
1
2
server-id=1.2.3.4
end
没有“server-id”时输出
$ more file
1
2
end
$ ./shell.sh
1
2
end
server-id=1.2.3.4