ed: define a primeira linha como a linha atual padrão

ed: define a primeira linha como a linha atual padrão

Estou tentando ededitar a primeira linha de um arquivo grande, mas tenho que esperar para edler todas as linhas. Existe alguma maneira de parar edde ler o arquivo inteiro e começar a editar imediatamente, sendo a linha atual a primeira linha?

Responder1

Conforme observado por shellter, ednão pode fazer isso. A maioria das operações de edição exige que o arquivo seja reescrito, apenas substituições podem ser feitas no local; nesse caso, você pode usar hexedit(1).

A maneira que menos consome memória é usar sedoperações, por exemplo, para substituirAgostocomJunhona primeira linha:

sed '1s/August/June/' FILE > NEWFILE

Responder2

Não é possível interromper eda leitura de um arquivo inteiro ou tornar automaticamente a primeira linha do buffer de edição a linha atual após abrir um documento com o editor.

O ededitor sempre coloca você na última linha afetada por um comando (ou logo depois ou antes quando o comando é d), e ler um arquivo na inicialização é semelhante a usar e filename, que descarta o buffer de edição atual, abre o arquivo nomeado para edição e define a linha atual como a última linha lida do arquivo.

Você gostaria de fazer alterações em um documento grande de maneira não interativa e usar sedou awkpode fornecer alternativas melhores, pois essas ferramentas funcionam em fluxos e, por padrão, não leem o documento completo na memória.

Se você realmente deseja fazer a edição interativa de documentos enormes, você pode tentar dividir o documento em partes com split, editar as partes que deseja modificar (usando edou viqualquer outro editor) e, em seguida, simplesmente usar catpara concatenar o pedaços juntos novamente.


Sessão de edição hipotética para editar as primeiras 5 linhas de um arquivo enorme em ed:

$Ed
e! head -n 5 arquivo enorme
123
g/^/m0
c ! { gato - ; tail -n +6 arquivo enorme; } > arquivo enorme.new
P

Ou seja, solicite a edição da saída de head -n 5 hugefile. A edição que realizo aqui é simplesmente inverter as linhas ( g/^/m0, "mover cada linha, por sua vez, para antes da primeira linha"). Em seguida, escreva o buffer de edição modificado em um comando shell que concatena o conteúdo do buffer com a linha 6 e em diante a partir do arquivo original. O resultado é gravado em um novo nome de arquivo. Qentão sai do editor.

informação relacionada