2015-05-21 166 views
0

我想要做以下操作,獲取我的服務器的主機IP,然後使用此值替換配置文件中的虛擬值。將命令的結果傳遞給SED

對於第1步中獲取服務器的ip我打電話:

hostname -I | head -n1 | awk '{print $1;}' 

對於第2步替換文件中的虛擬價值,我會做:

sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename. 

的想法是要結合本步入一個unix命令而不使用任何shell腳本。

任何幫助,將不勝感激 羅布

回答

3

你就要成功了 - 只是窩在彼此的兩個命令:

sed -i s/'dummyvalue'/$(hostname -I | head -n1 | awk '{print $1;}')/g filename 

請注意,您需要刪除周圍的單引號圍繞着s///g,並將它們放在dummyvalue左右。否則bash不會嘗試解釋內部命令。

+0

感謝您的快速響應。讓我給一個鏡頭。 –

+0

就像一個魅力,爲什麼我不能接受你的答案? –

+0

如果該主機名稱命令鏈的輸出包含任何代表sed替換上下文中的某些字符(例如, '/','&','\ 1'等 –

1

當您使用awk時,您不需要一系列管道命令。只需在一個awk命令中完成。你沒有表現出任何樣本輸入和期望輸出所以這顯然是未經測試,但將接近你所需要的,如果不完全:

hostname -I | 
awk -i inplace 'NR==FNR{if (FNR==1) val=$1; nextfile} {gsub(/dummyvalue/,val)} 1' - filename 

上述用途呆子4 *爲-i inplacenextfile,與其他awks只是這樣做:

hostname -I | 
awk 'NR==FNR{if (FNR==1) val=$1; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename