переменная sed вставить перед последней строкой

1

Я хотел бы вставить переменную перед последней строкой.

Это мой файл.

$ 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?
dsstorefile1

Ответы:

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
саз
источник
0

По-другому:

$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five
fpmurphy
источник