Vim 如何使用Linux删除八进制字符?
我有一个大文件需要在Linux中编辑。 该文件的数据字段用双引号(“”)括起来。但是,当我使用记事本++打开文件时,我看到双引号之间的SOH字符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
(即“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
。