如何在 Linux 中使用 `tr` 替换字符

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本教程将指导你在 Linux 中使用 tr(翻译)命令,以替换、删除文本文件或命令输出中的字符,或对其进行字符转换。tr 命令是一个多功能工具,可让你执行各种文本转换操作,是 Linux 工具库中的一个宝贵工具。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/TextProcessingGroup -.-> linux/tr("Character Translating") subgraph Lab Skills linux/tr -.-> lab-415206{{"如何在 Linux 中使用 `tr` 替换字符"}} end

了解 tr 命令

tr 命令是 “translate”(翻译)的缩写,是一个强大的 Linux 实用工具,可让你在给定输入中替换、删除或压缩字符。它是一个多功能工具,可用于各种文本处理任务,是 Linux 用户工具包的重要组成部分。

什么是 tr 命令?

tr 命令是一个标准的 Unix/Linux 实用工具,用于从标准输入(通常是文件或另一个命令的输出)中翻译或删除字符,并将结果写入标准输出。它可用于执行各种字符转换,例如:

  • 用其他字符替换一个或多个字符
  • 删除特定字符
  • 将重复字符压缩(或折叠)为单个出现的字符

tr 命令的基本语法如下:

tr [OPTION] SET1 [SET2]

这里,SET1SET2 是要翻译或删除的字符集。OPTION 参数可用于指定其他行为,例如使用 --delete 删除 SET1 中的字符,或使用 --squeeze-repeats 压缩重复字符。

理解 tr 中的字符集

tr 命令对字符集进行操作,字符集通过多种方法定义:

  • 单个字符:你可以指定单个字符,如 ab1
  • 字符范围:你可以使用连字符 (-) 运算符指定字符范围,如 a-z0-9
  • 字符类:你可以使用预定义的字符类,如 [:upper:] 表示大写字母,[:lower:] 表示小写字母,[:digit:] 表示数字。

这些字符集可分别用于 SET1SET2 中,以定义输入和输出字符。

实际示例

让我们探讨一些使用 tr 命令的实际示例:

  1. 将小写字母替换为大写字母

    echo "hello, world!" | tr "[:lower:]" "[:upper:]"

    输出:HELLO, WORLD!

  2. 删除特定字符

    echo "abc123def" | tr -d "1-3"

    输出:abcdef

  3. 压缩重复字符

    echo "hello   world" | tr -s " "

    输出:hello world

这些示例展示了 tr 命令的多功能性以及它如何用于执行各种文本处理任务。在下一节中,我们将更深入地探讨 tr 命令的更高级用例和实际应用。

使用 tr 替换字符

tr 命令的主要用例是替换给定输入中的字符。这对于各种文本处理任务非常有用,例如数据清理、格式转换和字符编码转换。

替换字符的语法

使用 tr 命令替换字符的基本语法如下:

tr 'SET1' 'SET2'

这里,SET1 表示你要替换的字符,SET2 表示你要用作替换的字符。tr 命令会将 SET1 中的每个字符替换为 SET2 中相应的字符。

例如,要将所有小写字母替换为大写字母,可以使用以下命令:

echo "hello, world!" | tr "[:lower:]" "[:upper:]"

输出:

HELLO, WORLD!

在这个例子中,[:lower:] 表示所有小写字母的集合,[:upper:] 表示所有大写字母的集合。tr 命令将每个小写字母替换为其对应的大写字母。

处理字符范围

你还可以使用字符范围来替换一组字符。例如,要将所有数字替换为其对应的大写字母,可以使用以下命令:

echo "abc123def" | tr "0-9" "A-J"

输出:

abcABCdef

在这种情况下,0-9 表示数字范围,A-J 表示从 A 到 J 的大写字母范围。tr 命令将每个数字替换为相应的大写字母。

实际示例

以下是使用 tr 命令替换字符的更多实际示例:

  1. 将空格替换为下划线

    echo "hello world" | tr " " "_"

    输出:hello_world

  2. 一次性替换多个字符

    echo "abc123def" | tr "a-c 3" "x-z 9"

    输出:xyz129def

  3. 转换字符编码

    echo "résumé" | tr "é" "e"

    输出:resume

这些示例展示了 tr 命令在执行字符替换任务时的灵活性。通过理解语法和各种字符集选项,你可以根据特定的文本处理需求定制 tr 命令。

tr 命令的实际应用

tr 命令是一个多功能工具,可用于广泛的实际场景。以下是 tr 命令的一些常见应用:

数据清理与转换

tr 命令最常见的用例之一是数据清理与转换。例如,你可以使用 tr 来:

  • 从文件或文本输入中删除不需要的字符
  • 将文本转换为大写或小写
  • 通过替换特殊字符或标点来规范化文本
## 从文件中删除非字母数字字符
cat file.txt | tr -cd '[:alnum:]'

## 将文件转换为大写
cat file.txt | tr '[:lower:]' '[:upper:]'

## 在 CSV 文件中用分号替换逗号
cat file.csv | tr ',' ';'

文本处理与格式化

tr 命令还可用于各种文本处理和格式化任务,例如:

  • 删除前导/尾随空格
  • 将多个空格合并为一个空格
  • 替换特定字符或单词
## 删除前导和尾随空格
echo "   hello, world!   " | tr -d '[:space:]'

## 将多个空格合并为一个空格
echo "hello   world" | tr -s ' '

## 将所有出现的 "foo" 替换为 "bar"
echo "foo is foo" | tr "foo" "bar"

编码转换

tr 命令对于执行字符编码转换很有用,例如:

  • 在不同的字符编码之间进行转换(例如,从 ASCII 转换为 UTF-8)
  • 删除或替换特定的带重音字符
## 从字符串中删除重音
echo "résumé" | tr "é" "e"

## 将文件从 ISO-8859-1 转换为 UTF-8
iconv -f ISO-8859-1 -t UTF-8 file.txt | tr -d '\r'

这些只是 tr 命令实际应用的几个示例。通过了解其功能并将其与其他 Linux 实用工具结合使用,你可以创建强大的文本处理工作流程,以满足各种需求。

总结

在本教程中,你已经学习了如何在 Linux 中使用 tr 命令来替换、删除文本文件和命令输出中的字符,或者对其进行字符转换。你探索了各种示例和用例,展示了这个命令行工具的强大功能和灵活性。通过掌握 tr 命令,你可以简化文本处理任务,并提高在 Linux 环境中的整体工作效率。