Insira uma palavra na primeira linha do arquivo

4

Entrada:

firstline
secondline
thirdline

... alguma mágica acontece aqui ...:)

Saída:

insertedtextfirstline
secondline
thirdline

Pergunta : Como posso inserir o insertedtext no início da primeira linha de um arquivo?

    
por LoukiosValentine79 08.06.2015 / 11:30

7 respostas

5

Com o GNU sed :

sed -i '1s/^/insertedtext/' file

Isso substitui o início da primeira linha pelo texto inserido. -i substitui o texto em file em vez de enviar o texto modificado para a saída padrão.

(Agradecimentos a glenn jackman por sugerir a queda da captura que eu tinha anteriormente.)

    
por 08.06.2015 / 11:35
6

Se a portabilidade entre os unices for uma preocupação, use ed :

ed file <<END
1s/^/insertedtext/
w
q
END
    
por 08.06.2015 / 18:52
4

POSIX um:

$ { printf %s insertedtext; cat <./input_file; } >/tmp/output_file
$ mv -- /tmp/output_file ./input_file
    
por 08.06.2015 / 18:57
3

Em perl

perl -pi -e 's/^(.*)/insertedtext$1/ if $.==1' myfile.txt

    
por 08.06.2015 / 21:24
2

O GNU sed serve.

sed -i '1s/\(.*\)/insertedtext/'

No entanto, observe que o acréscimo no início do arquivo requer a reescrita de todo o seu conteúdo. No caso de arquivos pequenos, isso não é um problema, mas se o arquivo em questão tiver várias dúzias de gigabytes, pode se tornar uma tarefa complicada executá-lo com eficiência.

Nesses casos, você geralmente deseja fazer alguns truques sujos, como garantir que o texto de substituição tenha exatamente o mesmo comprimento que o original e apenas modificar os bytes selecionados no local.

    
por 08.06.2015 / 11:40
2

Outra variação - não mais ou menos correta, apenas uma questão de gosto:

awk 'BEGIN{printf "insertedtext"};{print $0}' file1.txt > file2.txt
    
por 08.06.2015 / 21:05
0
<<IN head -n-1 >textfile
insertedtext$(
cat   <textfile
printf \n.)
IN

Nos shells que lidam com documentos com tempfiles (para incluir bash e zsh mas não dash , busybox ou yash ) o comando acima sobrescreverá com segurança o inteiro de textfile consigo mesmo e incluir a cadeia de caracteres prepended. O \n. à direita é adicionado para preservar quaisquer linhas em branco à direita em textfile - que, de outra forma, seriam eliminadas pela substituição do comando.

    
por 08.06.2015 / 19:47