Atualmente estou executando o Gnu ed versão 1.18 no Debian WSL no Windows. Se eu editar um arquivo com a seguinte codificação:
ASCII text, with CRLF, LF line terminators
ou
ASCII text, with CRLF,
então ed não une linhas corretamente com o j command
. Em vez disso, exclui a primeira linha a ser unida.
Esse problema não ocorre se o arquivo for criado em ed, mas afeta arquivos que foram criados em outros programas e são editados em ed. O mesmo problema é encontrado no GNU ed 1.17.
Isso é um inseto? Como se contornaria esse problema?
O
ed
editor assumirá que o documento é um arquivo de texto Unix. Quando apresentado a um arquivo de texto DOS (um arquivo com terminações de linha CRLF), ele tratará os caracteres de retorno de carro no final de cada linha como qualquer outro caractere.Isso significa que se você tiver um arquivo de texto DOS como o seguinte (aqui visualizado usando
,l
para listar o arquivo de maneira inequívoca, com os retornos de carro visíveis como\r
e cada final de linha exibido como$
),... e, em seguida, use
2,3j
para unir a linha três no final da linha dois, você obteráQuando as
ed
saídasline 2\rline3\r
para o terminal, o cursor é movido de volta para o início da linha pelo caractere literal de retorno de carro incorporado no meio da linha, o que dá a impressão de que o textoline 2
desaparece (na verdade, é substituído porline 3
).A solução é converter seu documento em texto Unix usando uma ferramenta como
dos2unix
, ou excluir todos os retornos de carro à direita de dentro do editor usando... onde você digita
^M
using Ctrl+VCtrl+M (isso digita um retorno de carro literal).No GNU
ed
versão 1.18 e posterior, você também pode optar por iniciar o editor com a--strip-trailing-cr
opção, que remove qualquer retorno de carro à direita do final das linhas quando você abre um arquivo. Isso é exatamente o que os///
comando acima faz.