Sed:无法正确定义图案,请你协助吗?

时间:2014-12-10 12:17:30

标签: sed

我正在尝试将“ARG1 $”添加到此行的末尾:

command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $

我试过了:

sed -e 's/^command\[check_net_speed\]$/$ARG1$/g' /etc/nagios/nrpe.cfg
sed -e 's/.*speed.*/$ARG1$/g' /etc/nagios/nrpe.cfg

但是没有人能做到这一点......什么是捕捉“check_net_speed”命令模式并在行末添加“ARG1 $”的正确方法,所以该行看起来像这样:

command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $ARG1$

4 个答案:

答案 0 :(得分:1)

这样的东西
sed -e 's/^command\[check_net_speed\].*/&ARG1$/g' input
command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $ARG1$

答案 1 :(得分:0)

更改您的sed命令,如下所示,

sed -e '/^command\[check_net_speed\]/s~$~ARG1$~' file

/^command\[check_net_speed\]/匹配以command[check_net_speed]开头的行,并在这些匹配行上进行替换。

正则表达式部分中的

$表示该行的结尾。因此,上面的命令用ARG1$

替换行锚的结尾

示例:

$ echo 'command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $' | sed -e '/^command\[check_net_speed\]/s~$~ARG1$~'
command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $ARG1$

答案 2 :(得分:0)

$具有特殊含义:行尾。要将它视为文字,你必须逃脱它:

sed '/^command\[check_net_speed\].*\$/s/$/ARG1$/' file

这将用字符串$替换行尾(仅由ARG1$表示)。因此,最后,ARG1$将附加到该行。

/command/部分仅用于在包含字符串command的行中执行此替换。

测试

$ cat a
command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $
ddd
$  sed '/^command\[check_net_speed\].*\$/s/$/ARG1$/' a
command[check_net_speed]=/usr/lib64/nagios/plugins/check_net_speed.sh $ARG1$
ddd

答案 3 :(得分:0)

作为nu11p01n73R答案的补充。使用

sed -e 's/^command\[check_net_speed\].*\$$/&ARG1$/g;q' /etc/nagios/nrpe.cfg
替换命令后

;q表示在第一次匹配后停止处理该文件的其余部分。