Por que o 'sed' não estende o comprimento de um arquivo? [fechadas]

0

Dado um arquivo com linhas como:

 1. 1
 2. 2
 3. 3
 4. 4
 5. 5

E eu corro o comando 'sed':

sed -i "/4/a\text\" filename.txt

O arquivo termina como:

 1. 1
 2. 2
 3. 3
 4. text
 5. 4

A linha que indica "5" desapareceu.

A última linha parece ter sido empurrada, como se o número de linhas no arquivo não tivesse sido alterado.

Eu executei o comando sem o sinalizador '-i', que significa 'insert in place'.

sed "/3/a\text\" filename.txt > temp.txt; mv temp.txt filename.txt;

Mas recebeu o mesmo efeito, apesar de um sinalizador "no local" não ter sido especificado. Esta é a função pretendida do sed? Existe uma maneira de permitir linhas a serem adicionadas?

    
por Shepherd 10.01.2018 / 21:55

2 respostas

0

Se você quiser adicionar linhas de texto, use uma cotação simples.

exemplo:

[root@h2g2w ~]# sed -i '/4/a\text\' toto    
[root@h2g2w ~]# cat toto                    
1                                           
2
3
4
text
5
[root@h2g2w ~]#

isso só funciona bem ... Você tem certeza de que a versão sed que você está usando é gnu one? Mesmo aspas duplas é ok (mas é um erro do usuário usá-las aqui)

[root@h2g2w ~]# sed -i "/4/a\text\ " toto
[root@h2g2w ~]# cat toto
1
2
3
4
text
text
5
[root@h2g2w ~]#
    
por 10.01.2018 / 21:58
0

Primeiro de tudo, os comandos que você postou resultam em problemas de sintaxe para mim se eu os coloco diretamente no shell.

Em segundo lugar, ambos os comandos que você forneceu acabam com o arquivo original, 'filename.txt' sendo modificado diretamente pelo sed, ou por outros comandos.

Seu primeiro exemplo, como você supõe, faz com que o sed modifique o arquivo diretamente através do uso da opção '-i'. Em seu segundo exemplo, 'filename.txt' é sobrescrito pelo comando mv temp.txt filename.txt .

Assim, em ambos os exemplos, você está vendo o resultado esperado.

E sim, sed pode ser usado para inserir linhas.

link

    
por 10.01.2018 / 22:08