我们今天收到的文件中包含很多<96>:
A^Y^ABC^EFG^HIJK<96>this - PM^0^0^0^456^-123^0^0^0^0^0^0^0^08/10/18
我们想将其更正为:
A^Y^ABC^EFG^HIJK^this - PM^0^0^0^456^-123^0^0^0^0^0^0^0^08/10/18
我在vi中进行了此操作,但显示未找到模式:
:%s/<96>/^/g
我尝试过
od -c file.txt
并返回:
0000000 A ^ Y ^ A B C ^ E F G
0000020 ^ H I J K < 9 6 > t h i
0000040 s - P
0000060 M ^ 0 ^ 0 ^ 0 ^ 4 6 6 ^ - 1 2 3
0000100 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0 ^ 0
0000120 8 / 1 0 / 1 8 \n
提示<96>是<96>。不知道为什么我不能在vi中替换<96>。我也很好奇<96>在这里是什么意思?有上师可以帮忙吗?谢谢!
答案 0 :(得分:4)
您可以在Vim中将十六进制字符96替换为:
:%s/\%x96/^/g
这里是:help regex
:
/\%d /\%x /\%o /\%u /\%U E678
\%d123 Matches the character specified with a decimal number. Must be
followed by a non-digit.
\%o40 Matches the character specified with an octal number up to 0377.
Numbers below 040 must be followed by a non-octal digit or a non-digit.
\%x2a Matches the character specified with up to two hexadecimal characters.
\%u20AC Matches the character specified with up to four hexadecimal
characters.
\%U1234abcd Matches the character specified with up to eight hexadecimal
characters.
在脚本中,您可以将其替换为八进制的tr
:
LC_ALL=C tr '\226' '^' <myfile.txt >newfile.txt
答案 1 :(得分:1)
(主要来自How to search and replace an unprintable character,请阅读以获取更多建议)
如果要查找和替换无法打印的字符,请将光标移到该字符上,然后按
ga
这将在屏幕底部显示字符的十六进制值。
查找并替换该十六进制字符,运行
:%s/\%x[Hex]/[Replacement]/g
其中[Hex]
是您找到的2位十六进制代码,而[replacement]
是您想要的任何内容。
如果十六进制代码是4位数字,请运行此代码
:%s/\%u[Hex]/[Replacement]/g