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 sed
comando precisa usar um literal $
(para que o i
comando se aplique à última linha do arquivo)E $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
no 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 -i
opção, para que isso sed
não atrapalhe seu arquivo de entrada enquanto você descobre a sintaxe correta. Adicione mais -i
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
Responder2
Outra maneira:
$ NAME=name
$ sed '$i '"$NAME" file.list
one
two
three
four
name
five