2017-02-17 270 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