Como insiro uma linha na parte superior de um arquivo de texto usando a linha de comando?

24

Eu quero inserir um texto no topo de um arquivo já existente. Como posso conseguir isso? Tentei echo e tee , mas não obtive êxito.

Eu estava tentando inserir uma linha de recompra no topo do arquivo sources.list do terminal.

Nota

Eu preciso de uma solução rápida de uma linha, porque o método de outra resposta já era conhecido por mim

    
por Anwar 16.06.2012 / 12:49

6 respostas

36

Na verdade, é bem fácil com sed :

  • sed -i -e '1iHere is my new top line\' filename

  • 1i informa ao sed para inserir o texto que segue na linha 1 do arquivo; não se esqueça da \ newline no final, para que a linha 1 existente seja movida para a linha 2.

por ish 16.06.2012 / 13:20
6

Em geral, a edição em vigor com um script é complicada, mas você pode usar echo e cat e, em seguida, mv

echo "fred" > fred.txt
cat fred.txt t.txt >new.t.txt
# now the file new.t.txt has a new line "fred" at the top of it
cat new.t.txt
# can now do the rename/move
mv new.t.txt t.txt

No entanto se estiver jogando com o sources.list, você precisará adicionar alguma validação e proteção contra marcadores para detectar erros, etc., porque você realmente não quer perder isso. Mas essa é uma questão separada: -)

    
por Sean 16.06.2012 / 12:59
6
./prepend.sh "myString" ./myfile.txt

sabe que prepend é meu shell personalizado :

#!/bin/sh
#add Line at the top of File
# @author Abdennour TOUMI
if [ -e  ]; then
    sed -i -e '1i\' 
fi

Use também um caminho relatif ou caminho absoluto, ele deve funcionar bem:

./prepend.sh "my New Line at Top"  ../Documents/myfile.txt

Atualização:

se você quiser um script permanente para isso, abra nano /etc/bash.bashrc e adicione essa função no final do arquivo:

function prepend(){
# @author Abdennour TOUMI
if [ -e  ]; then
    sed -i -e '1i\' 
fi

}

Reabra seu terminal e aproveite:

prepend "another line at top" /path/to/my/file.txt
    
por Abdennour TOUMI 10.10.2013 / 13:27
5

E por que não usar um editor de texto genuíno para isso? ed é o editor de texto padrão.

ed -s filename <<< $'1i\nFIRST LINE HERE\n.\nwq'

Ou, se você quiser que os comandos sejam mais legíveis:

ed -s filename < <(printf '%s\n' 1i "FIRST LINE" . wq)
  • 1 : vá para a primeira linha
  • i : modo de inserção
  • suas coisas que você deseja inserir ...
  • . : parar de inserir, voltar ao modo normal
  • wq : escreva e saia, obrigado, adeus.
por gniourf_gniourf 10.10.2013 / 22:41
3

Existe sempre a opção awk . Substitua a variável string pelo seu conteúdo. Esta não é uma mudança no local embora. Pessoalmente, costumo não fazer alterações no local. Esta é definitivamente uma preferência pessoal. Duas coisas, -v significa uma variável no awk e a variável n é usada aqui para corresponder a um número de linha, efetivamente NR == 1 . Você poderia usar isso de várias maneiras apenas alterando o valor de n e s .

string="My New first line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}'     file.source > file.target

Exemplo:

% cat file.source                                                                                                                                      

First Line
Second Line
Third Line

% string="Updated First Line"; awk -v n=1 -v s="$string" 'NR == n {print s} {print}' file.source > file.target; cat ./file.target                      !698

Updated First Line
First Line
Second Line
Third Line
    
por slashdot 16.06.2012 / 16:04
0

Você pode usar o Vim no modo Ex:

ex -sc '1i|hello world' -cx sources.list
  1. 1 selecione a primeira linha

  2. i inserir nova linha de texto

  3. x salvar e fechar

por Steven Penny 16.04.2016 / 19:08