Bash 替换一条线

Bash 替换一条线,bash,sed,Bash,Sed,我正在尝试使用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\u space\

我正在尝试使用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\u space\u left\u操作行,但仍然具有灵活性,如果有人用不同的内容更改space\u left\u操作值,sed仍将替换该行。

使用“^”检查行的开头

sed -i '/^space_left_action*/c\space_left_action = SYSLOG' /etc/audit/auditd.conf
你也可以试试这个

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

awk
版本

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

我试过了,没用。每个人的回答都有效。谢谢你的帮助!对于任何想知道的人来说,
[^]
所做的就是寻找一个不是
\
的字符。所以这失败了,因为虽然它排除了“管理空间左操作”,但它也排除了“空间左操作”