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

新手上路,请多包涵

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

原文由 vinllen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

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

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

[:print:] 包括:

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

The ANSI C quoting ( $'' ) is used for interpreting \t as literal tab inside $'' (in bash and alike).

原文由 heemayl 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 NeronLeVelu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏