插件窝 干货文章 linux什么命令可以过滤控制字符

linux什么命令可以过滤控制字符

字符 控制 删除 file 406    来源:    2025-05-02

在Linux中过滤控制字符(非打印字符)可以使用以下几种方法:


1. tr 命令

最常用的方法,可以删除所有控制字符或替换为可见字符:

# 删除所有控制字符(ASCII 0-31和127)
cat file.txt | tr -d '\000-\011\013-\037\177'

# 或替换控制字符为空格
cat file.txt | tr '\000-\011\013-\037\177' ' '

2. sed 命令

通过正则表达式匹配控制字符并删除:

# 删除所有控制字符(包括换行符外的其他控制字符)
sed 's/[[:cntrl:]]//g' file.txt

# 仅保留可打印字符(包括换行符)
sed 's/[^[:print:]\n]//g' file.txt

3. col 命令

专门用于过滤反向换行符等控制字符:

cat file.txt | col -b
  • -b 选项会删除所有控制字符(包括退格、反向换行等)。

4. strings 命令

提取文件中的可打印字符串(适合二进制文件):

strings file.txt

5. iconv 命令

转换或过滤非法字符(如编码问题导致的控制字符):

iconv -t ASCII//TRANSLIT < file.txt

6. cat -vcat -e

将控制字符转换为可见符号(不删除,仅可视化):

cat -v file.txt  # 显示^M等符号
cat -e file.txt  # 显示行尾$和控制字符

场景建议:

  • 快速删除控制字符 → 用 trcol -b
  • 处理文本文件 → 用 sedtr
  • 分析二进制/混合文件 → 用 strings
  • 调试控制字符位置 → 用 cat -v

如果有特定控制字符需要处理(如制表符 \t),可以针对性替换:

tr -d '\t' < file.txt  # 仅删除制表符