Vim 如何使用Linux删除八进制字符?

Vim 如何使用Linux删除八进制字符?,vim,replace,Vim,Replace,我有一个大文件需要在Linux中编辑。 该文件的数据字段用双引号(“”)括起来。但是,当我使用记事本++打开文件时,我看到双引号之间的SOH字符(即“filed1”SOH“field2”SOH“field3”SOH“field4”) 当我在vim中打开同一个文件时,我看到双引号后跟^A字符(即“文件1”^A“字段2”^A^A“字段3”^A“字段4”) 然后当我在命令行中执行这个命令时 cat filename.txt | od -c | more 我看到字符显示为001(即“filed1”00

我有一个大文件需要在Linux中编辑。 该文件的数据字段用双引号(“”)括起来。但是,当我使用记事本++打开文件时,我看到双引号之间的SOH字符
(即“filed1”SOH“field2”SOH“field3”SOH“field4”)

当我在vim中打开同一个文件时,我看到双引号后跟^A字符<代码>(即“文件1”^A“字段2”^A^A“字段3”^A“字段4”)

然后当我在命令行中执行这个命令时

cat filename.txt | od -c | more
我看到字符显示为001(即“filed1”001“field2”001001“field3”001“field4”)

我已经通过vim尝试了以下内容

:s%/\\001//g
我也试过这个命令

sed -e s/\001//g filename.text > filename_new.txt
sed -e s/\\001//g filename.text > filename_new.txt
我需要从该文件中删除这些字符。
如何才能做到这一点?

使用echo-e在sed命令中输入\001个文字字符:

$ sed -i -e $(echo -e 's/\001//g') file.txt

(-i是用于请求就地编辑的GNU sed扩展。)

使用echo-e在sed命令中获取\001个文字字符:

$ sed -i -e $(echo -e 's/\001//g') file.txt

(-i是用于请求就地编辑的GNU扩展。)

您试图用
\001
转义SOH字符的尝试已接近成功

GNU sed有一个扩展名,可以使用
\d001
指定十进制值(也有八进制和十六进制的变体):


在Vim中,正则表达式原子看起来略有不同:
\%d001
;或者,您可以通过Ctrl+V再加上
001
,直接在
:%s
命令行中输入字符;cp.
:帮助i_CTRL-V_digit

您尝试用
\001
转义SOH字符的尝试接近成功

GNU sed有一个扩展名,可以使用
\d001
指定十进制值(也有八进制和十六进制的变体):


在Vim中,正则表达式原子看起来略有不同:
\%d001
;或者,您可以通过Ctrl+V再加上
001
,直接在
:%s
命令行中输入字符;cp.
:帮助i_CTRL-V_digit

这起作用了。你能给我解释一下你做了什么吗?我是lunix新手,如果您能解释这行代码,我将不胜感激。您需要在sed命令中输入一个文本\001(即一个字符,ASCII值1),而不是字符串“\001”(即几个字符)的变体。echo-e是一个shell命令,它打印已将参数\ooo转换为八进制值ooo的字符(在本例中为001=ASCII 1),因此echo命令将打印出所需的sed命令。$(…)构造意味着“运行…命令,并将输出替换为此命令”,因此sed会看到echo输出,这是所需的命令,带有嵌入的\001字符。这很有效。你能给我解释一下你做了什么吗?我是lunix新手,如果您能解释这行代码,我将不胜感激。您需要在sed命令中输入一个文本\001(即一个字符,ASCII值1),而不是字符串“\001”(即几个字符)的变体。echo-e是一个shell命令,它打印已将参数\ooo转换为八进制值ooo的字符(在本例中为001=ASCII 1),因此echo命令将打印出所需的sed命令。$(…)构造意味着“运行…命令,并将输出替换为此命令”,因此sed会看到echo输出,这是所需的命令,带有嵌入的\001字符。此外,当您有一个由某些文本编辑器编写的文件,并且在linux中打开它时,您可能会在其中看到一些奇怪的字符。对于这样的文件,最好使用
dos2unix
命令来处理奇怪的字符。对于相反的情况,请使用
unix2dos
。此外,当您有一个由某些文本编辑器在windows中编写的文件,并在linux中打开它时,您可能会在其中看到一些奇怪的字符。对于这样的文件,最好使用
dos2unix
命令来处理奇怪的字符。对于相反的情况,请使用
unix2dos