我有一个问题需要帮助。 我正在编写一个脚本来更改文件示例中的参数
global
maxconn 4096
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
maxconn 2000
我想将全局的 maxconn 更改为 10000 并保持默认的 maxconn 为 2000,但是当我通过命令 sed 更改全局的 maxconn 时,默认的 maxconn 也发生了变化。请帮助我!
最佳答案
sed 是一个优秀的工具,可以在一行中进行简单的替换,但对于其他任何事情,只需使用 awk:
$ awk -v RS= -v ORS='\n\n' '/^global/{ sub(/maxconn[^\n]+/,"maxconn 10000") }1' file
global
maxconn 10000
pidfile /var/run/haproxy.pid
daemon
defaults
mode http
retries 3
maxconn 2000
将命令(awk 或其他)的输出写回原始文件:
command file > tmp && mv tmp file
"tmp"只是一些 tmp 文件,可以随意命名,例如 /usr/tmp/tmp$$
。
所以对于这个特定的命令你可以这样做:
awk -v RS= -v ORS='\n\n' '/^global/{ sub(/maxconn[^\n]+/,"maxconn 10000") }1' file > /usr/tmp/tmp$$ && mv /usr/tmp/tmp$$ file
关于linux - 如何只更改文件中的一个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18447118/