我收到了一个.txt
文件,其中包含很多<96>
,应该改为空格。
在vi中,我已经完成:
:%s/<96>//g
或
:%s/\<96>\//g
但是它仍然在那里。我做了dos2unix,但仍然没有将其删除。是Unicode吗?是,如何删除?谢谢!
答案 0 :(得分:2)
很有可能不是四个文字字符<
,9
,6
和>
。相反,它们可能是由0x96
字节形成的单个字符,Vim将其渲染为<96>
。
您可以通过执行(从bash
)来看到这一点:
printf '123\x96abc\x96def' > file.txt ; vi file.txt
您应该看到:
123<96>abc<96>def
要摆脱它们,您可以使用sed
之类的东西(假设您的sed
具有就地替换功能)
sed -i.save 's/\x96//g' file.txt
您也可以在vim
本身中执行此操作,您只需要意识到可以使用 CTRL-V (或 CTRL-Q (如果已设置 CTRL-V 用于粘贴)。有关详细信息,请参见here,在此处措辞与缩短以确保答案是独立的:
如果您知道字符值,则可以输入可以当前编码显示的任何字符,如下所示(
^V
表示CTRL-V
,如果使用CTRL-Q
CTRL-V
粘贴):
- 十进制:
^Vnnn
,000..255
。- 八音:
^Vonnn
,000..377
。- 十六进制:
^Vxnn
,00..ff
。- 十六进制,BMP Unicode:
^Vunnnn
,0000..FFFF
。- 十六进制,任何Unicode:
^VUnnnnnnnn
,00000000..7FFFFFFF
。在所有情况下,如果键入的下一个字符不是给定基数中的数字,则可以忽略开头的零(当然,除了必须将零值输入为至少一个零之外)。
十六进制数字A-F(使用时)可以大写或小写,甚至可以混合使用。
因此,您想要的键序列(假设您希望将它们替换为空格)是:
:%s/<CTRL-V>x96/ /g