Shell 添加或更改变量值
我想在/etc/my.cnf中添加以下行 服务器id=1789051 线路可能在那里,也可能不在那里。 如果存在,则通常是服务器id=1 如果我的IP是192.178.90.51,那么服务器id应该是1789051 我想知道一个shell脚本或命令是否可以做到这一点。awk的单向Shell 添加或更改变量值,shell,sed,Shell,Sed,我想在/etc/my.cnf中添加以下行 服务器id=1789051 线路可能在那里,也可能不在那里。 如果存在,则通常是服务器id=1 如果我的IP是192.178.90.51,那么服务器id应该是1789051 我想知道一个shell脚本或命令是否可以做到这一点。awk的单向 sed --in-place --expression='$aserver-id=1789051' --expression='/^server-id=/d' \ /etc/my.cnf #!/bin/bas
sed --in-place --expression='$aserver-id=1789051' --expression='/^server-id=/d' \
/etc/my.cnf
#!/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
存在“服务器id”时的输出
没有“服务器id”时的输出
这将替换文件中相同位置的行(如果存在),而不是将其移动到末尾。如果它不存在,它将把它附加到文件的末尾
sed '1{x;s/^$/server-id=1789051/;x};/^server-id=/{s/^.*$//;x};${G;s/\n//}' /etc/my.cnf
“--in-place”适用于GNU sed,而不是POSIX标准版本的sed。与“$a”(结尾追加)一起使用的符号对GNU sed也是唯一的;标准版本要求脚本中有反斜杠和换行符。也就是说,它似乎与GNU sed一起工作。@Jonathan Leffler:我本以为双破折号长选项是一个足够清楚的指标,表明这确实是GNU sed。
$ more file
1
2
end
$ ./shell.sh
1
2
end
server-id=1.2.3.4
sed '1{x;s/^$/server-id=1789051/;x};/^server-id=/{s/^.*$//;x};${G;s/\n//}' /etc/my.cnf