【问题标题】:Edit conf file without get in the file [duplicate]编辑conf文件而不进入文件[重复]
【发布时间】:2016-06-09 04:04:08
【问题描述】:

我想知道是否有一种方法可以在不进入文件并更改行的情况下编辑 conf 文件?

在我的情况下,我需要编辑 zabbix-agent conf 文件(位于 /etc/zabbix/zabbix_agentd.conf 中)并且文件中有一些我需要更改的参数,例如服务器名称、DebugLevel 和其他人。

通常我使用vim编辑文件并更改行,但我的想法是直接从bash编辑文件,但我不知道这是否可能。

例如,如果我需要更改参数 DebugLevel,我会在 bash 中运行:

# /etc/zabbix/zabbix_agentd.conf.DebugLevel=3

这实际上不起作用,但我想要这样的东西来解决我的问题......

有人知道吗?

我测试了大卫所说的,但它并没有解决我的问题...文件中有一些行被注释,我需要取消它们的注释,而有些行我只需要更改。

例如上面那行:

# DebugLevel=3

我需要改成:

DebugLevel=3

还有这一行:

Server=127.0.0.1

zabbix server name的IP需要改一下,像这样:

Server=172.217.28.142

还有其他方法吗?

【问题讨论】:

    标签: bash zabbix


    【解决方案1】:

    如果我正确理解您的问题,那么您需要 sed -i-i 选项允许 sed 就地编辑文件,-i.bak 将执行相同操作,但使用.bak 扩展)

    要将文件/etc/zabbix/zabbix_agentd.conf中的DebugLevel=3更改为DebugLevel=4,您可以:

    # sed -i.bak "/DebugLevel/s/[0-9][0-9]*$/4/" /etc/zabbix/zabbix_agentd.conf
    

    如果我误解了您的问题,请告诉我。

    最后改变价值观

    输入文件示例

    $ cat file.txt
    DebugLevel=3
    

    使用示例

    $ sed -i "/DebugLevel/s/[0-9][0-9]*$/4/" file.txt
    
    $ cat file.txt
    DebugLevel=4
    

    删除评论

    您几乎可以执行相同的操作来取消注释感兴趣的参数,例如:

    # sed -i.bak "/DebugLevel/s/^#//" /etc/zabbix/zabbix_agentd.conf
    

    在每种情况下,sed 都在第一组正斜杠 /.../ 中搜索标签,接下来的 substitute 命令称为s,然后是下一组之间的表达式正斜杠,例如/^#/^ 匹配开头),如果匹配,则替换为下一组 // 中的内容(在删除注释情况下没有任何内容)。

    您需要根据需要调整值以匹配您需要查找和替换的每个参数。让我知道您是否还有其他问题以及确切的问题所在。

    【讨论】:

    • 它没有用。我通过编辑问题更好地解释了问题。
    • 我也在答案中添加了删除 cmets。如果你有sed,那就是你想要的。
    猜你喜欢
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多