sed 在最後一行之前插入變數

sed 在最後一行之前插入變數

我想在最後一行之前插入一個變數。

這是我的文件。

$ 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 不會將$ised 腳本中的 解釋為“替換為變數 $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

相關內容