tr - 转换、删除和压缩字符

tr 从标准输入读取数据,对字符进行转换、删除或压缩,再把结果写到标准输出。

常用参数

  • -c--complement:使用指定字符集合的补集。
  • -d--delete:删除第一个字符集合中的字符。
  • -s--squeeze-repeats:把连续重复的指定字符压缩为一个。
  • -t--truncate-set1:先把第一个字符集合截断到与第二个集合相同的长度。

转换字符

# 小写字母转换为大写
printf '%s\n' 'Abc' | tr '[:lower:]' '[:upper:]'
 
# 大写字母转换为小写
printf '%s\n' 'Abc' | tr '[:upper:]' '[:lower:]'
 
# 将冒号转换为空格
printf '%s\n' 'name:value' | tr ':' ' '

使用 [:lower:][:upper:] 等字符类通常比直接写 a-z 更清晰,也更能表达本地化环境下的意图。

删除字符

# 删除所有数字
printf '%s\n' 'abc123' | tr -d '[:digit:]'
 
# 只保留字母和数字
printf '%s\n' 'a-b_c 123' | tr -cd '[:alnum:]'

压缩连续字符

# 将连续空格压缩成一个空格
printf '%s\n' 'alpha    beta' | tr -s ' '
 
# 将连续换行压缩成一个换行
tr -s '\n' < input.txt

tr 处理的是字符集合,不是普通字符串替换工具。需要替换完整字符串或使用正则表达式时,可考虑 sedawk

参考资料