Cha*_* Ma 35 regex vim non-printable
我有一个带有一些不可打印字符的文件,它们显示为^ C或^ B,我想找到并替换这些字符,我该怎么做呢?
小智 65
仅删除控制符号:
:%s/[[:cntrl:]]//g
Run Code Online (Sandbox Code Playgroud)
删除不可打印的字符(请注意,在~8.1.1之前的版本中,这也会删除非ASCII字符):
:%s/[^[:print:]]//g
Run Code Online (Sandbox Code Playgroud)
如果您有一些不可打印的非控制字符,例如零宽度空间,则可以看到它们之间的差异:
ars*_*ars 34
假设你想用C代替^ C:
:%s/CtrlVC/C/g
在CtrlVC按住时,表示V型,然后是C型Ctrl.
CtrlV 允许您输入控制字符.
tic*_*ock 10
在vim中保存文件后尝试此操作(假设您在Linux环境中)
:%!tr -cd '[:print:]\n'
Run Code Online (Sandbox Code Playgroud)
这里使用Vim的控制字符的答案都不适合我.我不得不进入unicode范围.
:%s/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F]//g
Run Code Online (Sandbox Code Playgroud)
在另一篇文章中找到了unicode范围:https://stackoverflow.com/a/8171868/231914
您可以使用:
:%s/^C//g
Run Code Online (Sandbox Code Playgroud)
为了得到^C
按住Ctrl键,按V
然后C
(两者同时按住Ctrl键),并且^C
将出现.这将找到所有出现并替换它们.
要删除这两个^C
,^B
你可以这样做:
:%s/^C\|^B//g
Run Code Online (Sandbox Code Playgroud)
其他答案中未提及的选项。
删除具有长十六进制代码的特定 unicode 字符,例如<200b>
:
:%s/\%U200b//g
Run Code Online (Sandbox Code Playgroud)