Encontrando o último caractere de um arquivo e adicionando uma string depois disso? [duplicado]

1

Acrescentar uma linha extra é simples, pois posso usar echo "line" >> file , mas e se eu quiser adicionar uma string logo após o último caractere no arquivo sem iniciar uma nova linha? Quais são algumas boas maneiras de fazer isso?

    
por user3669481 23.07.2016 / 01:12

2 respostas

4

Um arquivo de texto unix bem formado deve ter uma nova linha no final do arquivo. Para alcançar o que você deseja, a string deve ser colocada antes da nova linha à direita existente .

Considere este arquivo de teste:

$ cat File
1
2
3

Agora, vamos adicionar palavras à última linha antes do último caractere de nova linha:

$ sed '$s/$/new words/' File
1
2
3new words

Ou, se você quiser editar o arquivo, use a opção -i :

sed -i.bak '$s/$/new words/' File

Como funciona:

  • $

    O primeiro $ diz ao sed para executar apenas o comando que segue na última linha do arquivo.

  • s/$/new words/

    Para a última linha no arquivo, isso coloca new words no final da linha, mas antes do caractere final da nova linha.

    Em um comando substituto, $ significa o fim da linha.

por 23.07.2016 / 01:27
1

Para evitar reescrever o arquivo inteiro que você procuraria no final do arquivo, faça backup de um caractere e escreva.

Fazer isso com ferramentas comuns de shell Unix é um pouco duvidoso.

No entanto, há o Perl, que faz tudo. Você também pode usar Ruby ou Python ou qualquer outra linguagem de script com recursos completos.

Exemplo de Perl:

#!/usr/bin/env perl

use strict;
use Fcntl qw(:seek);

open(F, '+<', 'testfile') or die "$!";
seek(F, -1, SEEK_END) or die "$!";
print F "new data\n";
close(F) or die "$!";
    
por 23.07.2016 / 05:08