Linux中的tr命令举例说明

时间:2020-03-05 15:29:56  来源:igfitidea点击:

tr命令中的“ tr”代表翻译(translation)。
这个漂亮的命令用于将一种类型的字符转换为另一种类型的字符。
例如,如果要将文本转换为全部大写或者全部小写,可以使用tr命令。

tr命令足以进行简单快速的翻译,但与awk或者sed命令的功能不匹配。

Linux中tr命令的实际示例

tr命令具有以下语法:

tr [options] charset1 [charset2]

这些是tr命令的有用选项:

  • -d:删除第一组中的字符
  • -c:补全第一组字符,即仅对第一组中没有的字符进行操作
  • -s:删除第一组中多个相邻出现的字符
  • -t:截断第一组

让我们看看如何在各种使用案例中使用tr命令及其选项。

1.将小写转换为大写,反之亦然

tr命令最流行的用法之一是转换大小写。
首先让我使用cat命令在示例文件中显示文本。

Hyman@theitroad:~$cat sample.txt
This is my life
and my file

现在,如果我们要将文本转换为所有大写字母,则需要执行以下操作:

cat sample.txt | tr 'a-z' 'A-Z'

以下是上述命令的输出:

Hyman@theitroad:~$cat sample.txt | tr ‘a-z’ ‘A-Z’
THIS IS MY LIFE
AND MY FILE

我们还可以在这里使用字符类:

Hyman@theitroad:~$cat sample.txt | tr [:lower:] [:upper:]
THIS IS MY LIFE
AND MY FILE

要将文本转换成所有小写字母,我们只需要交换字符集即可:

cat sample.txt | tr 'A-Z' 'a-z'

2.用另一组字符替换一组字符

在上面的示例中,我们将小写字母转换为大写字母。
同样,我们可以将一组字符替换为另一组字符。
匹配是一一完成的。

让我用这个例子来解释:

Hyman@theitroad:~$cat sample.txt | tr ‘ilm’ ‘tyz’
Thts ts zy ytfe
and zy ftye

在这种情况下,每字符基础将第一组字符替换为第二组字符。
这里的“ i”被替换为“ t”,“ l”被替换为“ y”,“ m”被替换为“ z”。

如果第二组小于第一组,则重复第二组的最后一个字符。
换句话说,如果我们使用tr'ilm''ty',那么'l'和'm'都将被替换为'y'。

此方法的一个实际示例是将{}替换为{}或者将下划线(_)替换为破折号(-)之类的东西。
我们也可以以相同的方式在Linux中将制表符转换为空格。

3.删除特定字符

如果要删除一个或者多个特定字符,可以使用tr命令的-d选项:

Hyman@theitroad:~$cat sample.txt | tr -d ‘is’
Th my lfe
and my fle

在上面的示例中,“ i”和“ s”的所有实例均已删除。
如果我们只希望删除“是”,那么我们错了。
这就是为什么sed命令在文本处理方面是更好的选择的原因。

4.删除重复字符,例如多个空格

假设文本有多个空格,并且我们想用一个空格替换多个空格。

我将在此处使用echo命令作为示例文本:

Hyman@theitroad:~$echo “Text has too many spaces” | tr -s ” “
Text has too many spaces

我们也可以用另一个字符替换多次出现的字符。
例如,我们可以用分号(;)替换所有出现的空格。

Hyman@theitroad:~$echo “Text has too many spaces” | tr -s ” ” “;”
Text;has;too;many;spaces

5.删除所有非数字字符

假设文字同时包含字母和数字,而我们只想保留数字。
我们可以使用补码选项-c并将其与删除选项-d结合使用。

Hyman@theitroad:~$echo “Phone number is 123456789” | tr -cd [:digit:]
123456789

6.截断搜索模式

选项-t在截断搜索模式时很有用。
假设第一组字符大于第二组字符。
在这种情况下,第二组中的最后一个字符将替换第一组中的所有其余字符。

让我通过以下示例对此进行解释:

Hyman@theitroad:~$cat sample.txt | tr ‘isef’ ’12’
Th12 12 my l122
and my 21l2

在上面的示例中,“ i”替换为1,所有s,e和f替换为2.
如果使用truncate选项-t,它将截断“ is”的第一组字符,其余的e和f将保持不变:

Hyman@theitroad:~$cat sample.txt | tr -t ‘isef’ ’12’
Th12 12 my l1fe
and my f1le