sed variável de inserção antes da última linha

1

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

Este é o meu arquivo.

$ cat file.txt
one
two
three
four
five

Quando eu 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, não funciona. Eu tentei combinações diferentes de aspas duplas e barras invertidas.

$ NAME=name
$ sed -i '$i "$NAME"' file.txt
$ cat file.txt
one
two
three
four
"$NAME"
five
    
por Sandhya B 15.04.2018 / 05:12

2 respostas

1

Em bash , aspas simples são para sequências literais fixas. Aspas duplas são usadas onde você deseja que a interpolação de variáveis, a substituição de comandos, etc. ocorra.

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

BTW, é melhor testar coisas como essa sem usar a opção -i , para que sed não atrapalhe seu arquivo de entrada enquanto você está descobrindo a sintaxe correta. Adicione o -i mais tarde quando tiver certeza de que está fazendo exatamente o que deseja.

$ NAME=name
$ sed "\$i $NAME" file.list 
one
two
three
four
name
five
    
por 15.04.2018 / 05:49
0

Outra maneira:

$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five
    
por 17.04.2018 / 07:04

Tags