我有一个问题需要帮助。
我正在编写一个脚本来更改文件示例中的参数
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”只是一个名为whatever和where you please,
/usr/tmp/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