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

时间:2017-03-30 04:04:01

标签: linux sed non-printable

vim pic 如何删除图片1中显示为蓝色的特殊字符,如:^ M,^ A,^ @,^ [。根据我的理解,^ M是一个Windows换行符,我可以使用sed -i '/^M//g'删除它,但它不能删除其他人。命令dos2unix既不起作用也不起作用。是否有任何方法可以用来删除它们?

4 个答案:

答案 0 :(得分:13)

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

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

[:print:]包括:

  • [:alnum:](alpha-numerics)
  • [:punct:](标点符号)
  • 空间

ANSI C引用($'')用于将\t解释为$''内的文字标签(bash中的{{ record.date|date("Y") }} 等)。

答案 1 :(得分:4)

为了确保命令在Sed中使用有限的范围,强制使用"C" (POSIX) character classifications以避免使用非ASCII字符的不可预测的行为:

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

答案 2 :(得分:2)

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

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

dos2unix sample_file.txt

选项 - 2:

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

答案 3 :(得分:-1)

在vi或vim中尝试:

[in ESC mode] type: :%s/^M//g

或:

select userid, customer, event_name, event_timestamp,     
       row_number() over (partition by user_id, customer_number
                          order by  event_timestamp) as steps_rownum
from trackhist
order by userid, event_timestamp;

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