Я хотел бы вставить переменную перед последней строкой.
Это мой файл.
$ 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
sed "\$i $NAME" file.txt
?Ответы:
В
bash
, одинарные кавычки предназначены для фиксированных литеральных строк. Двойные кавычки используются там, где вы хотите, чтобы произошла интерполяция переменных, подстановка команд и т. Д.Ваша
sed
команда должна использовать как литерал$
(так чтоi
команда применяется к последней строке файла), так и$NAME
переменную для интерполяции. Чтобы сделать это, вам нужно «экранировать» литерал$
с помощью обратной косой черты, чтобы оболочка не интерпретировала$i
в вашем сценарии sed как «заменить содержимое переменной $ i» вместо «литерал с$
последующим литераломi
»:Кстати, лучше тестировать подобные вещи, не используя
-i
опцию, чтобыsed
не испортить входной файл, пока вы выясняете правильный синтаксис. Добавьте-i
позже, когда вы уверены, что он делает именно то, что вы хотите.источник
По-другому:
источник