[英]passing the result of a command to SED
我要執行以下操作,獲取服務器的主機ip,然后使用此值替換配置文件中的虛擬值。
對於獲取服務器IP的步驟1,我致電:
hostname -I | head -n1 | awk '{print $1;}'
對於步驟2替換文件中的虛擬值,我將執行以下操作:
sed -i 's/dummyvalue/valuefromprevioushostnamecommand/g' filename.
這個想法是將這些步驟組合成一個unix命令,而不使用任何shell腳本。
任何對此的幫助將不勝感激Rob
您快到了,只需將兩個命令相互嵌套即可:
sed -i s/'dummyvalue'/$(hostname -I | head -n1 | awk '{print $1;}')/g filename
請注意,您需要刪除s///g
周圍的單引號,並將其放在dummyvalue
周圍。 否則,bash不會嘗試解釋內部命令。
使用awk時,不需要一連串的管道命令。 只需執行一個awk命令即可。 您沒有顯示任何樣本輸入和預期輸出,因此顯然未經測試,但如果不完全接近,它將接近您的需求:
hostname -I |
awk -i inplace 'NR==FNR{if (FNR==1) val=$1; nextfile} {gsub(/dummyvalue/,val)} 1' - filename
上面的代碼對-i inplace
nextfile
和nextfile
使用gawk 4. *,而其他awks只是這樣做:
hostname -I |
awk 'NR==FNR{if (FNR==1) val=$1; next} {gsub(/dummyvalue/,val)} 1' - filename > tmp && mv tmp filename
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.