2017-02-17 296 views
1

我试图执行以下命令:试图执行“sed的”命令,但得到“命令未找到”错误

`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg` 

,但我发现这个错误

-bash: ###############################################################################: command not found 

如果我试图运行它没有后面滴答声,命令将工作。

我已经试过如下:

`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg` 2>&1 

`sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg`> /dev/null 

,但没有奏效。

+3

您试图运行'sed'的输出作为命令 - 这是预期的。你为什么需要背部蜱? – codeforester

+0

@codeforester嗨,我试图在shell脚本中执行此操作,所以我添加了后面的蜱虫。 – k189

+2

只有当你想对输出做某事时,你才需要反引号,比如将它存储到一个变量中。 –

回答

5

由于您的要求不是将sed的输出解释为命令,因此您不需要备份剔号或$()来调用sed

如果你的目的是修改/etc/nagios/objects/services.cfg,你可以这样做:

sed 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg > /etc/nagios/objects/services.cfg.new 

,或者使就地编辑(当你有绝对的把握,你的sed表达是正确的):

sed -i 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg 

在像macOS这样的BSD系统上,需要参数sed -i。该命令是:

sed -i '' 's/49%100%/49%!100%/' /etc/nagios/objects/services.cfg 

查看这些信息对反引号和更现代的形式更多的信息,$()

+1

'sed -i'在GNU和BSD实现之间是不相容的 - 在BSD之一(包括在MacOS X上),带有备份文件名后缀的参数是强制性的而不是可选的(没有备份文件,必须通过一个空字符串作为'-i'后面的单独参数) - 所以这里的代码在提供扩展的系统上并不是完全可移植的。 –

+3

'-i''',有空间; ''-i'''解析与'-i'完全相同,就其所传递的命令而言。 –

+0

@CharlesDuffy - 更正了答案。非常感谢。 – codeforester