Adicionando texto ao início do arquivo de texto

3

Eu estou tentando adicionar uma linha de texto ao início de um arquivo de texto (na verdade não texto, mas apenas duas barras invertidas). Estou tentando o seguinte, que encontrei nesta resposta: Adicionar linhas ao início e ao final do arquivo enorme

$ sed -i '1i\'"$\" $Simdata.txt

No entanto, parece que não consigo funcionar. Quando eu uso o acima, recebo o erro:

sed: 1: ".txt": invalid command code .

Eu tentei sem o final do txt, mas depois recebi este erro:

sed: -i may not be used with stdin

Eu também tentei esta linha de código, que eu encontrei em outro lugar:

$ sed -i '1i \' Simdata.txt
sed: 1: "Simdata.txt": invalid command code S

ATUALIZAÇÃO:

@don_crissti, sua primeira solução é o que eu quero fazer. No entanto, não parece funcionar como pretendido.

$ cat Simdata.txt
abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk
$ sed '1i\
> \\' Simdata.txt
\abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk
$ cat Simdata.txt
abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk

Portanto, o arquivo não é atualizado. Eu preferiria não imprimir o arquivo, apenas atualizar o arquivo ou imprimir para um novo. Além disso, eu fiz um erro de digitação bobo: eu realmente gostaria de adicionar duas barras. O que eu estou procurando fazer é o seguinte.

Eu tenho um arquivo parecido com isto:

abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk

Primeiro, quero adicionar // ao início do arquivo:

//
abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk
//
abcdefghijkabcdefghijk

Em seguida, adicione um nome exclusivo após cada //:

// text 1
abcdefghijkabcdefghijk
// text 2
abcdefghijkabcdefghijk
// text 3
abcdefghijkabcdefghijk

e salve-o em um novo arquivo, sem alterar o arquivo original. Portanto, a pergunta acima visava descobrir o primeiro passo.

    
por Hjalte 27.01.2015 / 21:13

3 respostas

3

Você tem que escapar das barras invertidas (então quatro barras invertidas irão inserir duas barras invertidas literais):

sed '1i\
\\' my_text_file

ou

sed '1s/^/\\\n/' my_text_file

O primeiro irá inserir uma nova linha contendo duas barras invertidas no início do seu arquivo, o segundo substituirá o início da primeira linha ( ^ ) com duas barras invertidas seguido por \n ewline (mesmo resultado ).
Com osx sed :

sed '1s/^/\\\'$'\n/' mytextfile   
    
por 28.01.2015 / 12:05
1

Se você quiser adicionar apenas dois \ ao início de um arquivo, isso deverá funcionar:

echo '\' | cat - todo.txt > temp && mv temp todo.txt
    
por 27.01.2015 / 21:23
1
echo '\\' > newfile.txt; cat oldfile.txt >> newfile.txt
    
por 27.01.2015 / 23:33