2014-10-04 54 views
1

我想:使用SED替代與一個bash變量

sed -i s/installpath/"$INSTALL_PATH"/ /tmp/myscript.conf 

當$ INSTALL_PATH只是一個字符串一切正常。但如果安裝路徑是實際路徑(我猜是'/'字符是問題),比如/ home/ubuntu/install_script。然後,它斷開與以下錯誤消息:

的sed:-e表達#1,炭16:未知的選項爲`S'

順便說一句:我嘗試沒有 「」大約$ INSTALL_PATH。沒有工作

感謝您的幫助!

回答

3

$INSTALL_PATH很可能包含斜槓,這意味着它們將被sed解釋爲s/pattern/replacement/構造的一部分。爲了避免這種情況,你應該使用不同的分隔符,例如~

sed -i "s~installpath~$INSTALL_PATH~" /tmp/myscript.conf 

我也用引號引用,而不是引用一個部分在整個SED線。一般來說,這樣做是個好主意,因爲它可以防止shell解釋其他字符。通常使用單引號,但如果要擴展shell變量,請使用雙引號。

3

您不必使用/作爲sed命令的分隔符。如果你小心地使用引號,你可以使用其他字符,甚至是不太可能的文件名中存在

sed -i s^installpath^"$INSTALL_PATH"^ /tmp/myscript.conf 

sed -i "s|installpath|$INSTALL_PATH|" /tmp/myscript.conf 

使用的東西,那是不太可能的文件名出現,如這條管道在Windows路徑中是完全違法的,在Linux上它是一個非常糟糕的主意,不太可能在野外發生。