2016-07-24 147 views
0

試圖寫一個bash腳本包含嵌套美元的變量,我無法得到它的工作:嵌套美元符號,引號裏的

#!/bin/bash 
sed '4s/.*/$(grep "remote.*$1" /home/txtfile)/' /home/target 

錯誤說:

SED/-e表達#1,字符30:未知選項的's'

問題似乎來自$ 1,它需要由從bash調用傳遞的參數替換,然後整個$(...)需要被命令調用替換,所以我們用字符串輸出替換目標行4。

回答

0

單引號內放時可變擴展和命令替換不會做,使用雙引號來代替:

sed "4s/.*/$(grep "remote.*$1" /home/txtfile)/" /home/target 
+0

這會產生各種輸入的值和/或目錄的從執行它的內容鼻惡魔因爲'remote。* $ 1'是un引。 –

0

你的做法是錯誤的,做你想要什麼是正確的方法就是一個命令,像這樣(取決於你可能$1值和輸入文件的內容,你還沒有告訴我們):

awk -v tgt='remote.*$1' ' 
NR==FNR { if ($0 ~ tgt) str = str $0 ORS; next } 
FNR==4 { printf "%s", str; next } 
{ print } 
' /home/txtfile /home/target