无法用sed或vim替换Unicode字符

问题描述:

我有一个我认为是unicode类型的文件,并想用sed或其他一些unix实用程序删除它们。我尝试了几个选项,出于某种原因无法删除这些字符。使用单线所示的试验例(头-n1)无法用sed或vim替换Unicode字符

尝试1:

> head -n1 file1.txt | hexdump -C # Hexdump line 1 
output: 
00000000 47 72 6f 75 70 c2 a0 20 20 20 53 69 67 6e 61 6c |Group.. Signal| 
00000010 c2 a0 6e 61 6d 65 c2 a0 20 20 20 20 20 20 20 20 |..name..  | 
00000020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |    | 
00000030 55 6e 69 74 c2 a0 20 74 79 70 65 c2 a0 44 65 73 |Unit.. type..Des| 
00000040 63 72 69 70 74 69 6f 6e c2 a0 0d 0a    |cription....| 
0000004c 

立即替换 “C2 A0” 以上

> head -n1 file1.txt | sed 's/\xc2\xa0//g' | hexdump -C 
or 
> head -n1 file1.txt | sed 's/\x{c2a0}//g | hexdump -C 
00000000 47 72 6f 75 70 c2 a0 20 20 20 53 69 67 6e 61 6c |Group.. Signal| 
00000010 c2 a0 6e 61 6d 65 c2 a0 20 20 20 20 20 20 20 20 |..name..  | 
00000020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |    | 
00000030 55 6e 69 74 c2 a0 20 74 79 70 65 c2 a0 44 65 73 |Unit.. type..Des| 
00000040 63 72 69 70 74 69 6f 6e c2 a0 0d 0a    |cription....| 

否更换happend

尝试2:使用vim

vim file1.txt 
:set nobomb 
:set fileencoding=utf-8 
:wq 

再次使用sed并没有发生替换。如何替换或删除这些字符(十六进制“c2a0”)?

我最终结束了使用Perl,它成功地删除了Unicode字符。

> perl -v 
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level 

> perl -pi -e 's/\x{c2}\x{a0}//g' file1.txt 
> head -n1 file1.txt | hexdump -C 
00000000 47 72 6f 75 70 20 20 20 53 69 67 6e 61 6c 6e 61 |Group Signalna| 
00000010 6d 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |me    | 
00000020 20 20 20 20 20 20 20 20 20 20 55 6e 69 74 20 74 |   Unit t| 
00000030 79 70 65 44 65 73 63 72 69 70 74 69 6f 6e 0d 0a |ypeDescription..| 
00000040