簡體   English   中英

將命令結果傳遞給SED

[英]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 nextfilenextfile使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM