我想在最後一行之前插入一個變數。
這是我的文件。
$ cat file.txt
one
two
three
four
five
當我嘗試不使用變數時,效果很好。
$ sed -i '$i name' file.txt
$ cat file.txt
one
two
three
four
name
five
當我使用變數時,它不起作用。我嘗試了雙引號和反斜線的不同組合。
$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five
答案1
在 中bash
,單引號用於固定的文字字串。雙引號用於需要進行變數內插、指令替換等的地方。
您的sed
命令需要同時使用文字$
(以便該i
命令適用於文件的最後一行)和 $NAME
以便對變數進行內插。為此,您需要使用$
反斜線“轉義”文字,以便 shell 不會將$i
sed 腳本中的 解釋為“替換為變數 $i 的內容”,而不是“文字$
後跟文字i
”:
順便說一句,最好在不使用該-i
選項的情況下測試這樣的東西,這樣sed
在您找出正確的語法時就不會弄亂您的輸入檔案。-i
當您確定它完全按照您的要求進行操作時,請稍後添加。
$ NAME=name
$ sed "\$i $NAME" file.list
one
two
three
four
name
five
答案2
其他方式:
$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five