Estou tentando ed
editar a primeira linha de um arquivo grande, mas tenho que esperar para ed
ler todas as linhas. Existe alguma maneira de parar ed
de ler o arquivo inteiro e começar a editar imediatamente, sendo a linha atual a primeira linha?
Responder1
Conforme observado por shellter, ed
nã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 sed
operações, por exemplo, para substituirAgostocomJunhona primeira linha:
sed '1s/August/June/' FILE > NEWFILE
Responder2
Não é possível interromper ed
a 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 ed
editor 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 sed
ou awk
pode 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 ed
ou vi
qualquer outro editor) e, em seguida, simplesmente usar cat
para 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. Q
então sai do editor.