如何使用Linux删除OCTAL字符?

时间:2014-03-12 00:09:24

标签: vim replace

我有一个需要在Linux中编辑的大文件。 该文件的数据字段用双引号(“”)括起来。但是当我使用notepad ++打开文件时,我在双引号(ie. "filed1"SOH"field2"SOHSOH"field3"SOH"field4")

之间看到了SOH字符

当我在vim中打开相同的文件时,我会看到双引号后跟^ A字符。 (ie. "filed1"^A"field2"^A^A"field3"^A"field4")

然后当我在命令行中执行此命令时

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

我需要从该文件中删除这些字符。 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

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

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

( - 我是一个GNU sed扩展,用于请求就地编辑。)

答案 1 :(得分:0)

您使用\001逃避SOH角色的尝试很接近。

GNU sed有一个扩展名,用\d001指定一个十进制值(还有八进制和十六进制变量):

$ sed -i -e 's/\d001//g' file.txt

在Vim中,正则表达式原子看起来略有不同:\%d001;或者,您可以通过 Ctrl + V 然后:%s直接在001命令行中输入字符; CP。 :help i_CTRL-V_digit