16

vim图片如何去除图1 中显示为蓝色的特殊字符,如:^M、^A、^@、^[。在我的理解中,^M 是一个windows换行符,我可以用sed -i '/^M//g'它来删除它,但它不能删除其他的。该命令dos2unix也不起作用。有什么方法可以用来删除它们吗?

4

4 回答 4

31

删除除可打印字符(字符类[:print:])之外的所有内容,使用sed

sed $'s/[^[:print:]\t]//g' file.txt

[:print:]包括:

  • [:alnum:](字母数字)
  • [:punct:](标点符号)
  • 空间

ANSI C 引用 ( $'') 用于解释\t为内部的文字选项卡$''(inbash等)。

于 2017-03-30T04:08:02.357 回答
10

为确保该命令在 Sed 中的有限范围内工作,请强制使用“C”(POSIX)字符分类以避免非 ASCII 字符出现不可预知的行为:

LC_ALL=C sed 's/[^[:blank:][:print:]]//g' file.txt
于 2017-03-30T09:31:18.637 回答
3

尝试在 linux 命令提示符下运行以下命令

选项 - 1:(如果 Linux 机器上安装了 dos2unix 命令)

dos2unix sample_file.txt

选项 - 2:

cat sample_file.txt | tr -d '\015' > new_sample_file.txt
于 2017-07-27T21:18:51.753 回答
-1

在 vi 或 vim 中试试这个:

[在 ESC 模式下] 键入::%s/^M//g

或者:

sed -e "s/^M//" filename > newfilename

重要提示:要输入 ^M,请输入 CTRL-V,然后输入 CTRL-M

于 2017-03-30T06:14:53.760 回答