sed insere variável antes da última linha

sed insere variável antes da última linha

Gostaria de inserir uma variável antes da última linha.

Este é o meu arquivo.

$ cat file.txt
one
two
three
four
five

Quando tento sem usar variáveis, funciona bem.

$ sed -i '$i name' file.txt
$ cat file.txt
one
two
three
four
name
five

Quando uso uma variável, ela não funciona. Tentei diferentes combinações de aspas duplas e barras invertidas.

$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five

Responder1

Em bash, aspas simples são para strings literais fixas. Aspas duplas são usadas onde você deseja que ocorra interpolação de variável, substituição de comando, etc.

Seu sedcomando precisa usar um literal $(para que o icomando se aplique à última linha do arquivo)E $NAMEpara a variável interpolar. Para fazer isso, você precisa "escapar" do literal $com uma barra invertida para que o shell não interprete o $ino seu script sed como "substituir pelo conteúdo da variável $i" em vez de "literal $seguido de literal i":

Aliás, é melhor testar coisas assim sem usar a -iopção, para que isso sednão atrapalhe seu arquivo de entrada enquanto você descobre a sintaxe correta. Adicione mais -itarde quando tiver certeza de que está fazendo exatamente o que deseja.

$ NAME=name
$ sed "\$i $NAME" file.list 
one
two
three
four
name
five

Responder2

Outra maneira:

$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five

informação relacionada