在Linux系统中,ASCII(美国信息交换标准代码)是字符编码的基础,它定义了128个字符(0-127),包括控制字符(如换行、回车)、可打印字符(字母、数字、标点)以及扩展ASCII(128-255,非标准),虽然Linux没有名为“ascii”的独立命令,但通过组合多种工具,可以高效查看、转换和分析ASCII字符,本文将详细介绍Linux中处理ASCII字符的核心命令、使用场景及实用技巧。

查看ASCII字符表:man 7 ascii
最直接的ASCII表查看方式是使用man命令的7章节(ASCII字符集),在终端输入:
man 7 ascii
这将显示完整的ASCII表,包括字符编号、十六进制值、控制字符含义(如NUL表示空字符,LF表示换行符)以及可打印字符的对应关系。
- 编号
65对应字符'A',十六进制0x41; - 编号
97对应字符'a',十六进制0x61; - 控制字符
0-31和127(DEL)用于设备控制,如BEL(响铃,0x07)、ESC(退出,0x1B)。
对于需要快速查询的场景,可以结合grep过滤特定字符:
man 7 ascii | grep -A 5 -B 5 '65'
将输出与65相关的行,方便定位字符信息。
字符与编码转换:printf、od、xxd
将字符转为ASCII码:printf
printf命令可通过%d、%o、%x等格式符将字符转换为十进制、八进制、十六进制ASCII码。
# 输出字符'A'的十进制ASCII码 printf "%dn" 'A' # 输出65 # 输出字符'a'的十六进制ASCII码 printf "%xn" 'a' # 输出61 # 同时输出多个字符的ASCII码 printf "%d %o %xn" '0' '1' '2' # 输出48 49 50 50 51 32
将ASCII码转为字符:printf或
将ASCII码转为字符时,可使用printf的%c格式符,或Bash的字符串:
# 十进制65转为字符'A' printf "%cn" 65 # 输出A # 十六进制61转为字符'a' printf "%cn" 0x61 # 输出a # 使用$'直接转义 echo $'x41' # 输出A(x后跟十六进制)
以不同进制显示文件内容:od与xxd
od(octal dump)和xxd(hex dump)是查看文件二进制内容的利器,可直观显示字符的ASCII码。
:默认以八进制显示,配合 -c选项可同时显示字符:echo "Hello" | od -c # 输出: # 0000000 H e l l o n # 0000006
其中
n是换行符(ASCII码10),-t o1可强制以八进制显示ASCII码:echo "A" | od -t o1 # 输出: # 0000000 101 # 0000001
xxd命令:以十六进制显示,适合查看二进制文件:
echo "Linux" | xxd # 输出: # 00000000: 4c69 6e75 780a Linux.
其中
4c是'L'的十六进制ASCII码,69是'i',以此类推。-r选项可将十六进制转回文本:echo "4c69 6e75 78" | xxd -r -p # 输出Linux
文本中的ASCII字符分析:cat -A、grep、tr
显示所有字符(含控制字符):cat -A
cat -A(或-vET)会显示文本中的所有字符,包括不可见的控制字符:
- 行尾
^M:回车符(CR,ASCII码13)^I:制表符(TAB,ASCII码9)^@:空字符(NUL,ASCII码0)
处理一个包含回车和换行的文件:
printf "HellornWorld" > test.txt cat -A test.txt # 输出:Hello^M$World$
过滤非ASCII字符:grep与tr
Linux文本处理常需确保内容为纯ASCII(如某些协议要求),可通过以下方式过滤:
:使用 [ - ]匹配ASCII范围(0-127):echo "Hello 世界" | grep -P '[ -~]' # 匹配可打印ASCII(32-126),输出"Hello "
-P启用Perl正则,[ -~]表示ASCII可打印字符(空格到)。: tr -d可删除非ASCII字符:echo "Hello 世界" | tr -d '[^x00-x7F]' # 删除ASCII 128以上的字符,输出"Hello "
x00-x7F是ASCII的完整范围(0-127)。
替换控制字符:tr与sed
控制字符可能干扰文本处理,可用tr或sed替换:
- 将制表符替换为空格:
cat file.txt | tr 't' ' ' > output.txt
- 删除所有换行符(合并为一行):
cat file.txt | tr -d 'n' > output.txt
高级应用:编码转换与批量处理
编码转换:iconv
iconv用于在不同编码间转换,如将UTF-8文本转为纯ASCII(需注意字符丢失):

# 将UTF-8文件转为ASCII,无法转换的字符替换为? iconv -f utf-8 -t ascii//translit input.txt -o output.txt
//translit表示无法转换的字符近似替换(如转为e),若直接使用-t ascii,无法转换的字符将被丢弃。
批量处理脚本示例
假设需要批量目录下的文本文件,删除非ASCII字符并替换控制字符:
#!/bin/bash
for file in *.txt; do
tr -d '[^x00-x7F]' < "$file" | tr -s 'nt' ' ' > "${file}.clean"
echo "Processed $file"
done tr -d删除非ASCII字符;tr -s将连续的换行、制表符替换为单个空格;- 结果保存为
原文件名.clean。
ASCII控制字符表(部分)
下表列出常用ASCII控制字符及其作用:
| 编号 | 十六进制 | 缩写 | 含义 |
|---|---|---|---|
| 0 | 0x00 | NUL | 空字符 |
| 1 | 0x01 | SOH | 标题开始 |
| 9 | 0x09 | HT | 水平制表符(Tab) |
| 10 | 0x0A | LF | 换行符 |
| 13 | 0x0D | CR | 回车符 |
| 27 | 0x1B | ESC | 退出键 |
| 127 | 0x7F | DEL | 删除字符 |
常用ASCII处理命令总结
| 命令 | 功能 | 常用选项 |
|---|---|---|
man 7 ascii | 查看ASCII字符表 | 无(直接执行) |
printf | 字符与ASCII码转换 | %d(十进制)、%c(字符)、%x(十六进制) |
od | 以八进制/字符显示文件内容 | -c(显示字符)、-t o1(八进制ASCII码) |
xxd | 以十六进制显示文件内容 | -r(十六进制转文本)、-p(纯十六进制) |
cat -A | 显示所有字符(含控制符) | 无(等同于cat -vET) |
tr | 字符替换/删除 | -d(删除)、-s(压缩重复字符) |
iconv | 编码转换 | -f(输入编码)、-t(输出编码) |
FAQs
Q1: 如何快速查看当前终端下某个按键的ASCII码?
A1: 使用stty和dd组合捕获按键输入,并通过od查看ASCII码:
stty -echo # 关闭回显 dd bs=1 count=1 2>/dev/null | od -c # 按下任意键,输出其ASCII码 stty echo # 恢复回显
例如按下Ctrl+C(ASCII码3),输出会显示