linux - 如何只更改文件中的一个参数

标签 linux shell parameters sed

我有一个问题需要帮助。 我正在编写一个脚本来更改文件示例中的参数

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/

相关文章:

c - 在 C 中访问可选参数,两个参数合二为一

bash - 测试是否没有给出位置参数的惯用方法?

php - 在 PHP 中使用数组类类型参数

c++ - Doxygen - 将参数声明为可选

c - 为 UDP 套接字的 recv fcn 设置超时

linux - 使用 tc 模拟特定端口上的网络延迟

linux - 如何使用 Linux 命令行拆分具有多个点的列

iPhone - 自动提交 Appstore

java - 我们可以使用脚本语言检查队列深度吗?

c++ - 每个文件的 seek_ptr 是唯一的吗?