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для интерполяции переменной. Для этого вам нужно "экранировать" литерал $с помощью обратной косой черты, чтобы оболочка не интерпретировала $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

Связанный контент