在Linux中过滤控制字符(非打印字符)可以使用以下几种方法:
tr
命令最常用的方法,可以删除所有控制字符或替换为可见字符:
# 删除所有控制字符(ASCII 0-31和127)
cat file.txt | tr -d '\000-\011\013-\037\177'
# 或替换控制字符为空格
cat file.txt | tr '\000-\011\013-\037\177' ' '
sed
命令通过正则表达式匹配控制字符并删除:
# 删除所有控制字符(包括换行符外的其他控制字符)
sed 's/[[:cntrl:]]//g' file.txt
# 仅保留可打印字符(包括换行符)
sed 's/[^[:print:]\n]//g' file.txt
col
命令专门用于过滤反向换行符等控制字符:
cat file.txt | col -b
-b
选项会删除所有控制字符(包括退格、反向换行等)。strings
命令提取文件中的可打印字符串(适合二进制文件):
strings file.txt
iconv
命令转换或过滤非法字符(如编码问题导致的控制字符):
iconv -t ASCII//TRANSLIT < file.txt
cat -v
或 cat -e
将控制字符转换为可见符号(不删除,仅可视化):
cat -v file.txt # 显示^M等符号
cat -e file.txt # 显示行尾$和控制字符
tr
或 col -b
。sed
或 tr
。strings
。cat -v
。如果有特定控制字符需要处理(如制表符 \t
),可以针对性替换:
tr -d '\t' < file.txt # 仅删除制表符