【问题标题】:sed replace a single linesed 替换一行
【发布时间】:2023-04-07 01:01:01
【问题描述】:

我正在尝试使用 sed 替换一行。

例子:

space_left_action = EMAIL
admin_space_left_action = SUSPEND

我试过这个命令:

sed -i '/space_left_action*/c\space_left_action = SYSLOG' /etc/audit/auditd.conf

结果:

space_left_action = SYSLOG
space_left_action = SYSLOG

我不想替换 admin_space_left_action 行,但仍然具有灵活性,如果有人用不同的东西更改 space_left_action 值,sed 仍然会替换该行。

【问题讨论】:

    标签: bash sed


    【解决方案1】:

    使用 '^' 检查行首

    sed -i '/^space_left_action*/c\space_left_action = SYSLOG' /etc/audit/auditd.conf
    

    【讨论】:

      【解决方案2】:

      你也可以试试这个

      sed -i '/[^_]space_left_action*/c\space_left_action = SYSLOG' /etc/audit/auditd.conf
      

      【讨论】:

      • 试过这个..没用。 EveryEvery的答案有效。感谢您的帮助!
      • 对于任何想知道的人来说,[^_] 所做的就是寻找一个不是_ 的字符。所以这会失败,因为虽然它排除了“admin_space_left_action”,但它也排除了“space_left_action”。
      【解决方案3】:

      awk 版本

      awk '/^space_left_action/ {$3="SYSLOG"}1' /etc/audit/auditd.conf
      space_left_action = SYSLOG
      admin_space_left_action = SUSPEND
      

      【讨论】:

        猜你喜欢
        • 2010-11-07
        • 1970-01-01
        • 2010-11-16
        • 2013-01-11
        • 1970-01-01
        • 1970-01-01
        • 2016-01-23
        • 1970-01-01
        • 2016-10-29
        相关资源
        最近更新 更多