Skip to content

tr 命令:转换或删除字符

1. 简介

tr 命令是 "translate" 的缩写,用于转换或删除字符。它可以用来进行字符替换、字符删除以及基本的字符转换,如大小写转换。tr 命令从标准输入读取数据,将结果写入标准输出。

2. 基本语法

bash
tr [选项] SET1 [SET2]

3. 常用选项

  • -d:删除 SET1 中的字符,不作翻译
  • -s:压缩重复的字符
  • -c:使用 SET1 的补集
  • -t:截断 SET1 使之与 SET2 长度相等

4. 基础使用示例

  1. 将小写转换为大写:

    bash
    echo "hello world" | tr 'a-z' 'A-Z'
  2. 删除特定字符:

    bash
    echo "hello world" | tr -d 'aeiou'
  3. 将空格替换为换行符:

    bash
    echo "hello world" | tr ' ' '\n'
  4. 删除重复字符:

    bash
    echo "hello     world" | tr -s ' '

5. 进阶使用技巧

  1. 使用字符类:

    bash
    echo "hello 123 world" | tr '[:lower:]' '[:upper:]'
  2. 删除非数字字符:

    bash
    echo "hello 123 world" | tr -cd '[:digit:]'
  3. ROT13 加密:

    bash
    echo "hello world" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
  4. 将制表符转换为空格:

    bash
    cat file.txt | tr '\t' ' '

6. 实用示例

  1. 创建字符集的补集:

    bash
    echo "hello 123 world" | tr -c '[:alnum:]' ' '
  2. 删除文件中的所有空白字符:

    bash
    tr -d '[:space:]' < file.txt
  3. 将多个空格压缩为一个:

    bash
    echo "hello   world" | tr -s ' '
  4. 将 Windows 文本文件转换为 Unix 格式:

    bash
    tr -d '\r' < win_file.txt > unix_file.txt

7. 注意事项

  • tr 命令不接受文件名作为参数,它只能通过标准输入读取数据。
  • 当 SET2 比 SET1 短时,SET2 的最后一个字符会被重复使用。
  • tr 命令按字符处理输入,不支持多字节字符或正则表达式。

8. 相关命令

  • sed:更强大的流编辑器
  • awk:用于更复杂的文本处理
  • iconv:用于字符集转换
  • dos2unixunix2dos:用于转换文件格式

9. 技巧与建议

  1. 使用 tr 快速生成测试数据:

    bash
    tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 10
  2. 结合其他命令使用:

    bash
    cat file.txt | tr '[:upper:]' '[:lower:]' | sort | uniq -c
  3. 使用 tr 进行简单的文本加密:

    bash
    echo "secret message" | tr 'A-Za-z' 'N-ZA-Mn-za-m'
  4. 清理输入数据:

    bash
    cat data.csv | tr -d '[:cntrl:]' > cleaned_data.csv

tr 命令是一个简单但强大的文本处理工具。它在处理简单的字符级转换时非常高效,特别适用于清理数据、格式转换和基本的文本操作。虽然它不如 sedawk 功能丰富,但在许多日常任务中,tr 的简洁性使它成为首选工具。熟练使用 tr 可以帮助你快速完成各种文本转换任务,提高文本处理的效率。