如何删除Linux文本中的所有特殊字符

问题描述 投票:0回答:4

vim pic 如何删除图片1中显示为蓝色的特殊字符,例如:^M、^A、^@、^[。根据我的理解,^M是Windows换行符,我可以使用

sed -i '/^M//g'
删除它,但删除其他字符不起作用。命令
dos2unix
也不起作用。有什么方法可以将它们都删除吗?

linux sed non-printable
4个回答
41
投票

删除除可打印字符(字符类

[:print:]
)之外的所有内容,使用
sed
:

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

[:print:]
包括:

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

ANSI C 引用 (

$''
) 用于将
\t
解释为
$''
内的文字制表符(在
bash
等中)。


10
投票

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

LC_ALL=C sed 's/[^[:blank:][:print:]]//g' file.txt

5
投票

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

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

dos2unix sample_file.txt

选项 - 2:

cat sample_file.txt | tr -d '\015' > new_sample_file.txt

-1
投票

在 vi 或 vim 中尝试一下:

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

或:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.