Я хотел бы вставить переменную перед последней строкой.
Это мой файл.
$ 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