Cada linha do arquivo contém a string
^M 1
duas vezes. Isto é,
<carriage-return><tab>1
^M^I1
\r\t1
(Essas são três representações diferentes dos mesmos caracteres de controle)
Quando isso é enviado diretamente para o seu terminal, como cat
fará, o
terminal interpreta isso como uma instrução para voltar ao início da linha, mover mais de 8 caracteres e exibir um 1
.
Quando você cat
do arquivo original, esse 1
adicional é exibido sobre um 1
existente, por isso você não percebeu.
Depois de alterar o prefixo de scaffold
para scaffold_
, o 1
adicional agora é exibido sobre o _
, então agora você percebeu isso.
Quando você abre o arquivo em vi
ou emacs
, o editor não interpreta a sequência <carriage-return>
da mesma maneira, mas a exibe.
Suponho que você não deseja as strings <carriage-return><tab>1
em seu arquivo. Você pode removê-los com sed
:
sed -i 's/\r\t1//g' myfile
Com relação ao comentário "Não posso confiar em meus próprios olhos" - já que as sequências de controle mudam a forma como as coisas são exibidas, sim, elas podem ser confusas. Uma maneira de ver as coisas mais claramente é com cat
-v
e -T
opções:
-v, --show-nonprinting use ^ and M- notation, except for LFD and TAB
-T, --show-tabs display TAB characters as ^I
-t equivalent to -vT
Por exemplo:
$ cat myfile
scaffold1test
$ cat -t myfile
scaffold_hello^M^I1