我正在尝试查找并替换变量,但它不起作用。
这是代码。我需要附加-C -w 10% -c 5% -p /u0
以追加到匹配行的末尾。我不知道如何压制( - )任何想法?谢谢。
OLD=$(command[check_disk]=/usr/local/nagios/libexec/check_disk -w 10% -c 5% -p / -p /var -p /tmp -p /home -p /boot -p /usr -A -e)
NEW=$(command[check_disk]=/usr/local/nagios/libexec/check_disk -w 10% -c 5% -p / -p /var -p /tmp -p /home -p /boot -p /usr -A -e -C -w 10% -c 5% -p /u0)
sed -i "s/$OLD/$NEW/" /home/scripts/nrpe.cfg
答案 0 :(得分:0)
试试这个(假设bash
):
OLD='command[check_disk]=/usr/local/nagios/libexec/check_disk -w 10% -c 5% -p / -p /var -p /tmp -p /home -p /boot -p /usr -A -e'
NEW='command[check_disk]=/usr/local/nagios/libexec/check_disk -w 10% -c 5% -p / -p /var -p /tmp -p /home -p /boot -p /usr -A -e -C -w 10% -c 5% -p /u0'
oldEscaped=$(sed 's/[^^]/[&]/g; s/\^/\\^/g' <<<"$OLD")
newEscaped=$(sed 's/[\\&/]/\\&/g' <<<"$NEW")
sed -i "s/$oldEscaped/$newEscaped/" /home/scripts/nrpe.cfg
$(...)
误认为字符串引用机制(它不是;它用于command substitution(执行所附的命令并替换构造用命令的输出))
要分配文字字符串,只需使用单引号,如上所述。sed
的{{1}}(字符串替换)命令,因为某些字符对{具有特殊意义} {1}},所以要使用它们字面 它们必须转义 - 最明显的问题是s
个实例字符串,被误认为是sed
命令的分隔符。
/
命令用于执行必要的转义:
s/.../.../
转义旧字符串,以便其所有字符都不会被误认为是正则表达式分隔符或特殊正则表达式字符。sed
转义 new 字符串,以便其所有字符都不会被误认为正则表达式分隔符或反向引用(例如sed 's/[^^]/[&]/g; s/\^/\\^/g' <<<"$OLD"
或sed 's/[\\&/]/\\&/g' <<<"$NEW"
) 。 最后,请注意,使用全大写的 shell 变量名称(例如&
)更好 ,以避免与环境发生冲突变量。