como remover ctrl F no arquivo unix

7

Ao editar um arquivo unix, recebo dados como abaixo no editor vi.

MGW:^FVMG107
MGW:^FVMG113
MGW:^FVMG108
MGW:^FVMG103

em que os dados acima de ^F não podem ser visualizados no comando cat . Eu tentei dos2unix & sed também, mas ainda existe. Como posso remover ^F

    
por user73553 30.06.2014 / 13:53

4 respostas

15

^F é vim dizendo que há um caracter não imprimível 0x06 (F é a sexta letra do alfabeto, eles variam: '^ @', '^ A', '^ B' ... ' ^ Y ',' ^ Z '.' ^ [',' ^ \ ',' ^] ',' ^^ ',' ^ _ ')

Eu não tive nenhum problema em removê-lo graficamente no vim, nano, joe… mas se você preferir uma abordagem de linha de comando, sabendo que é o caractere 0x06, você pode usar sed -i 's/\x06//g' filename para removê-lo.

PS: Eu tenho medo que a solução polym de remover ^ F em cat -v só funcione se o seu arquivo não tiver nenhum outro caractere não imprimível, que seria mutilado.

    
por 30.06.2014 / 14:47
2

Como Ángel diz, ^F in vi ou a saída de cat -v denota um caractere 06. Outra maneira de se livrar desses personagens é

tr -d "" < oldfile > newfile
    
por 30.06.2014 / 17:58
2

Editar: Como Anjo mencionado, você não deve usar esta solução, pois pode produzir alterações indesejáveis.

Sua solução (hex ( ^F ) == \x06 ):

sed -i 's/\x06//g' filename

Minha solução (imprópria):

cat -v oldfile | sed 's/\^F//g' > newfile

deve fazer isso.

    
por 30.06.2014 / 14:01
0

Dado que você está trabalhando com o arquivo no vim, você pode consertar isso dentro do vi / vim também. Você pode digitar esses caracteres com ctrl-v e depois ctrl-. Para isso, é crtl-v, seguido por ctrl-f.

Assim, você pode usar um simples localizar / substituir:

:%s/^F//

Isso funcionaria em todas as linhas (o%) e substituiria (s), a primeira instância de ^ F, por nada, removendo-a efetivamente.

Se você quiser ver caracteres ocultos em arquivos, em vez de cat, tente usar od -c:

od -c <file name>

por exemplo, mas colocando um ^ F e dois finais de linha em um arquivo:

alex@Smiley:/tmp|⇒  cat test


alex@Smiley:/tmp|⇒  od -c test
0000000  006  \n  \n
0000003

Isto imprime todos os caracteres que escaparam, incluindo tabulações, finais de linha, etc.

Se você quiser usar sed, você pode usar o mesmo comando ctrl-V, direito na linha de comando. Dessa forma, você não precisa se lembrar da tradução.

    
por 01.07.2014 / 03:50

Tags