Linux下通过sed命令对kv方式的配置文件进行修改

 更新时间:2018年11月12日 16:45:38   投稿:mrr  
sed是unix下的面向字符流的编辑器,即stream editor, 它是面向行的,以行为单位进行处理,同时,sed是非交互式的,一旦执行便要处理完整个文件。这篇文章主要介绍了Linux下通过sed命令对kv方式的配置文件进行修改,需要的朋友可以参考下

sed是unix下的面向字符流的编辑器,即stream editor, 它是面向行的,以行为单位进行处理,同时,sed是非交互式的,一旦执行便要处理完整个文件。

日常后台服务配置文件多以key-value的方式存在,例如ini文件、toml文件或一些自定义配置文件,当我们某些情况下需要编写自动化脚本对配置文件进行更改的时候,我们可以通过shell的sed命令进行正则匹配快速修改,十分简单快捷,减少很多“高级语言”编写的繁琐,下面主要列出两种比较常见的配置变更情况和命令参考例子:

用于测试的配置文件 test.conf

$ cat test.conf 
max.connections = 100
test.log_path = "/tmp/test.log"
fsync=on

值带引号的方式

#!/bin/bash
CONF=test.conf
set_key_value() {
  local key=${1}
  local value=${2}
  if [ -n $value ]; then
    #echo $value
    local current=$(sed -n -e "s/^\($key = '\)\([^ ']*\)\(.*\)$/\2/p" $CONF) # value带单引号
    if [ -n $current ];then
      echo "setting $CONF : $key = $value"
      value="$(echo "${value}" | sed 's|[&]|\\&|g')"
      sed -i "s|^[#]*[ ]*${key}\([ ]*\)=.*|${key} = '${value}'|" ${CONF}
    fi
  fi
}
set_key_value "max.connections" "1024"
set_key_value "test.log_path" "/data/logs/test.log"

值不带引号的方式

CONF=test.conf
set_key_value() {
  local key=${1}
  local value=${2}
  if [ -n $value ]; then
    #echo $value
    local current=$(sed -n -e "s/^\($key = \)\([^ ']*\)\(.*\)$/\2/p" $CONF) # value不带单引号
    if [ -n $current ];then
      echo "setting $CONF : $key = $value"
      value="$(echo "${value}" | sed 's|[&]|\\&|g')"
      sed -i "s|^[#]*[ ]*${key}\([ ]*\)=.*|${key} = ${value}|" ${CONF}
    fi
  fi
}
set_key_value "fsync" "off"

总结

以上所述是小编给大家介绍的Linux下通过sed命令对kv方式的配置文件进行修改,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 网站加速VPS篇 memcache和memcached安装方法

    网站加速VPS篇 memcache和memcached安装方法

    Memcache是一个自由和开放源代码、高性能、分配的内存对象缓存系统。用于加速动态web应用程序,减轻数据库负载。
    2010-12-12
  • Linux自动化构建工具make和Makefile详解

    Linux自动化构建工具make和Makefile详解

    这篇文章主要介绍了Linux如何自动化构建工具make和makefile,文章中有详细的图片示例,对学习有一定的参考价值,感兴趣的小伙伴可以参考一下
    2023-04-04
  • ubuntu16.04在python3 下创建Django项目并运行的操作方法

    ubuntu16.04在python3 下创建Django项目并运行的操作方法

    这篇文章主要介绍了ubuntu16.04在python3 下创建Django项目并运行,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 在Linux系统上刷新DNS缓存的方法

    在Linux系统上刷新DNS缓存的方法

    DNS是互联网的一项服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用记住能够被机器直接读取的 IP 数串,但是,有时候我们可能需要刷新或清除 DNS 缓存,本文将详细介绍如何在Linux系统上刷新DNS缓存,需要的朋友可以参考下
    2024-06-06
  • Git fetch和pull的详解及区别

    Git fetch和pull的详解及区别

    这篇文章主要介绍了Git fetch和pull的详解及区别的相关资料,需要的朋友可以参考下
    2017-02-02
  • Ubuntu16.04安装Jenkins的方法图文详解

    Ubuntu16.04安装Jenkins的方法图文详解

    这篇文章主要介绍了Ubuntu16.04安装Jenkins,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 基于Ubuntu 16.04设置固定IP的方法教程

    基于Ubuntu 16.04设置固定IP的方法教程

    这篇文章主要给大家介绍了基于Ubuntu 16.04设置固定IP的方法教程,文中通过图文以及示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-10-10
  • Trash-Cli:Linux上的命令行回收站工具

    Trash-Cli:Linux上的命令行回收站工具

    今天小编就为大家分享一篇关于Linux上的命令行回收站工具,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-09-09
  • Linux 常用文本处理命令和vim文本编辑器

    Linux 常用文本处理命令和vim文本编辑器

    这篇文章主要介绍了Linux 常用文本处理命令和vim文本编辑器,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • CentOS7安装PHP7 Redis扩展的方法步骤

    CentOS7安装PHP7 Redis扩展的方法步骤

    这篇文章主要介绍了CentOS7安装PHP7 Redis扩展的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04

最新评论