2014-01-23 6 views
1

각 문자 뒤에 ^@ 자 (파란색)로 보이는 파일이 있습니다. 이 문자는 vi file.txt에서만 볼 수 있습니다. cat을 사용하여 이러한 문자를 볼 수 없습니다. 어떻게 제거 할 수 있습니까?리눅스 파일에서^@ 문자를 제거하십시오.

나는 다음과 같은 명령을 사용하여 시도 :

sed "s/[^@]//g" a.txt > b.txt 

그러나이 파일을 변경하는 것 같지 않았어요.

+1

당신은 유닉스에 DOS (윈도우 물건)로 변환하는'dos2unix'를 사용할 수 있습니다. – fedorqui

+0

UTF16 인코딩의 파일이있을 확률이 높습니다. 리눅스에서는 대부분의 경우 바이트 지향적 인 현재 로케일에서이를 볼 수 있습니다 (UTF-8조차도).^@로 보이는 것은 ASCII 코드 0입니다. 16 비트 기호의 상위 부분은 대부분의 라틴 문자에 대해 0입니다. – user3159253

+1

null 바이트 (0x00)입니다. 파일이 각 문자에 대해 2 바이트를 사용하는 UTF-16으로 인코딩되어 있기 때문에 일반 ASCII 텍스트의 경우 ASCII 바이트와 비어있는 Null 바이트가 있습니다. –

답변

2

iconv -f UTF16 -t UTF8 <your-file> > <new-file>

+0

감사합니다. – user1882633

+0

@ user1882633 다음과 같은 오류가 발생합니다. iconv : 불완전한 문자 또는 버퍼 끝의 시프트 시퀀스 어쨌든 나를 도울 수 있습니까? : D –

+0

원본 파일이 올바른 UTF16입니까? – user3159253

0

dos2unix file.txt file.txt을 시도합니다. 이것은 할 것입니다 ..

+1

UTF-16 파일을 UTF-8로 변환하려면 dos2unix> = 6.0이 필요합니다. –

0

이 작동합니다

sed "s/[\^@]//g" a.txt > b.txt 
관련 문제