2017-02-11 130 views
1

下面的代碼行將兩個不同的固定字符串添加到行的開頭和結尾。Sed,如何用變量和字符串組合替換字符串?

sed -i 's/.*/somefixedtext,&,someotherfixedtext/' ${f} 

somefixedtext,20,30,10,50,someotherfixedtext 

我想用一個變量,給我下面來提高輸出,而不是什麼上面;

HELLO,somefixedtext,20,30,10,50,someotherfixedtext 

嘗試了一些變化,但都以失敗告終;

VARIABLE="HELLO" 
sed -i 's/.*/"$VARIABLE,somefixedtext,&,someotherfixedtext/' ${f} 

如何在sed中將字符串變量合併到固定字符串的開頭?

回答

2

桑達是一個糟糕的選擇,如果替換字符串是一個變量,因爲它把該變量作爲sed命令而不是文字字符串,因此,如果變量包含特殊字符,例如/&或類似這將打破。

AWK是更適合這個任務,例如像:

$ cat file 
20,30,10,50 

$ var=hello 

$ awk -F, -v prefix="$var" -v OFS=, '{print prefix, "sometext", $0, "somethingelse"}' file 
hello,sometext,20,30,10,50,somethingelse 

對於就地修改,您將需要一個新版本的GNU的awk,和-i inplace參數。

對於它的價值,該命令會奏效,如果你用雙引號的變量,單引號外面,但是這將是一個有點馬車:

VARIABLE="HELLO" 
sed -i 's/.*/'"$VARIABLE"',somefixedtext,&,someotherfixedtext/' ${f} 
+1

非常感謝你,在桑達版本的Works很好。這兩個單引號吃了我2個小時:) –