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

uemypmqf  于 2023-01-21  发布在  Linux
关注(0)|答案(3)|浏览(185)

我需要在Linux中编辑一个大文件。该文件的数据字段用双引号(“”)括起来。但当我使用记事本++打开该文件时,我看到双引号(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(即“文件1“001“字段2“001001“字段3“001“字段4”)
我已经通过vim尝试了以下方法

:s%/\\001//g

我也试过这个命令

sed -e s/\001//g filename.text > filename_new.txt
sed -e s/\\001//g filename.text > filename_new.txt

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

wwodge7n

wwodge7n1#

您尝试使用\001转义SOH字符的次数非常接近。
GNU sed有一个扩展,可以用\d001指定十进制值(也有八进制和十六进制变体):

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

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

irtuqstp

irtuqstp2#

使用echo -e将文字\001字符添加到sed命令中:

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

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

wh6knrhe

wh6knrhe3#

只需使用awk使其保持简单,而不必为报价格式问题而烦恼:

mawk NF=NF FS='\1' OFS=
"filed1""field2""field3""field4"

相关问题