Impossível remover ^ finalizando de um arquivo de texto

1

Eu tenho um arquivo de texto com este final:

line1^I$^M$
line2^I$^M$
line3^I$^M$

Eu tentei muitas opções que encontrei na web usando o comando sed e até mesmo 'dos2unix', mas elas só funcionam para remover o ^M$ , mas não o ^I . Então meu arquivo agora é assim:

line1^I$
line2^I$
line3^I$

Examinei na Web, mas não há nada sobre ^I . O que exatamente significa isso?

    
por Fersal 14.06.2018 / 23:18

2 respostas

2

Assim, seu arquivo ficará assim usando od ou cat -A

$ od -c foo
0000000   l   i   n   e   1  \t  \n   l   i   n   e   2  \t  \n   l   i
0000020   n   e   3  \t  \n
0000025
$ cat -A foo
line1^I$
line2^I$
line3^I$
$

Para remover todos os caracteres ^I ( Tab ), você pode usar sed -i 's/\t//g' foo . Para separar apenas as guias no final de uma linha, use sed -i 's/\t$//' foo

$ sed -i 's/\t//g' foo
$ od -c foo
0000000   l   i   n   e   1  \n   l   i   n   e   2  \n   l   i   n   e
0000020   3  \n
0000022
$ cat -A foo
line1$
line2$
line3$
$
    
por 14.06.2018 / 23:46
0

^I provavelmente não está indicando um cursor seguido por um I, mas é uma representação do caractere composto pressionando Ctrl + I . Esse caractere tem um atalho na maioria dos teclados, a saber, Tab . Se você fosse para cat do arquivo, provavelmente veria algo como:

line1    $
line2    $
line3    $

A menos que, seja o que for que você esteja usando, que esteja exibindo literal ^I s também está mostrando o final da linha com um $ visível.

Você pode usar tr para eliminá-los, se quiser:

$ cat file | tr -d '\t'

\t , neste caso, é uma sequência mágica que é uma maneira fácil de representar um caractere de tabulação em várias ferramentas comuns (incluindo, de maneira útil, tr ).

dos2unix não fez nada para as Tabs porque elas são idênticas entre todas as plataformas que a ferramenta é usada para "traduzir" de e para.

    
por 14.06.2018 / 23:28