介绍`tr`命令的不同用途

143 阅读3分钟

`tr`是一个非常有用的UNIX命令。它用于转换字符串或删除字符串中的字符。使用这个命令可以完成各种类型的转换,比如搜索和替换文本,将字符串从大写字母转换为小写字母,反之亦然,从字符串中删除重复的字符,等等。该命令也可用于一些复杂的转换。本教程中介绍了`tr`命令的不同用途。

语法

tr [option] stringValue1 [stringValue2]

选项stringValue2在`tr`命令中是可选的。你可以在`tr`命令中使用-c**、-s-d**选项来完成不同类型的任务。

例1:改变大小写

你可以通过使用tr命令非常容易地改变字符串的大小写。要定义大写,你可以使用 [:upper:] 或 [A-Z] ,要定义小写,你可以定义 [:lower:] 或 [a-z] 。

`tr`命令可以用以下方式将任何字符串从大写转换为小写。

tr [:upper:] [:lower:]

你也可以通过以下方式使用`tr`命令,将任何字符串从小写转换为大写。

tr a-z A-Z

运行下面的命令,将字符串'linuxhint'的所有小字母转换成大写字母。

$ echo linuxhint | tr [:lower:] [:upper:]

输出:
执行上述命令后会出现以下输出。字符串'linuxhint'已经转换为字符串'LINUXHINT'。

你可以应用`tr`命令将任何文本文件的内容从大写转换为小写或从小写转换为大写。假设,你有一个名为items.txt的文本文件,内容如下:

  1. 监视器
  2. 键盘
  3. 鼠标
  4. 扫描仪
  5. 硬盘

从终端运行以下命令,显示items.txt文件的内容,以及将该文件的内容从小写转换为大写后`tr`命令的输出。`tr`命令将不会修改文件的原始内容。

$ cat items.txt
$ tr a-z A-Z < items.txt

输出:
执行上述命令后会出现以下输出。items.txt文件中的所有小字母都已被转换成大写字母。

你可以运行下面的命令,将`tr`命令的输出存储到另一个名为'output.txt'的文件中。

$ tr [:upper:] [:lower:] < items.txt > output.txt
$ cat output.txt

输出:
执行上述命令后会出现以下输出。output.txt文件包含所有的小字母。

例2:翻译字符

`tr`命令可以用来搜索和替换任何文本中的任何特定字符。下面的命令用来将文本 "Welcome to Linuxhint"中的每个空格转换为换行符(/n)。

$ echo "Welcome To Linuxhint" | tr [:space:] '\n'

输出:
执行上述命令后会出现以下输出。文字的每一个字都已经打印了每一行。

例3:使用-c (-complement)选项

`tr`命令可以和-c选项一起使用,用第二个字符替换那些与第一个字符值不匹配的字符。在下面的例子中,`tr`命令被用来搜索字符串'bash'中与字符'b'不匹配的那些字符,并用'a'替换它们。输出结果将是'baaaa'。这里有四个字符被转换。它们是,'a'、's'、'h'和'/n'。

$ echo "bash" | tr -c 'b' 'a'

输出:

执行上述命令后会出现以下输出。

例4:使用-s选项

`tr`命令使用**-s(-squeeze-repeats)**选项来搜索和替换文本中的任何字符串。在下面的例子中,空格('')被Tab('\t')所替代。

$ echo "BASH Programming" | tr -s ' ' '\t'

输出:

执行上述命令后会出现以下输出。这里,空格已经被制表符的空间所取代。

你可以在`tr`命令中同时使用-c和-s两个选项。在下面的例子中,小写字母的范围已经被用作第一个字符串值。对于-c选项,`tr`命令将搜索并替换文件items.txt中不是小字母的字符为换行('\n'),并将命令的输出存储在文件output.txt中。

$ cat items.txt
$ tr -cs [a-z] "\n" < items.txt > output.txt
$ cat output.txt

输出:
执行上述命令后会出现以下输出。output.txt文件只包含小字。

例5:使用-d (-delete)选项

-d选项与`tr`命令一起使用,用于搜索和删除文本中的任何字符或字符串。 在下面的例子中,`tr`命令将搜索 "Python是一种编程语言"字符串中的'P', 'y', 和't',并删除这些字符。

$ echo "Python is a Programming language" | tr -d 'Pyt'

输出:

执行上述命令后会出现以下输出。输出中的'P'、'y'和't'字符已经被删除。

在`tr`命令中,-c选项可以和**-d选项一起使用,以补充搜索的内容,就像前面的-cs命令。在下面的例子中,带有-cd**的`tr`命令将使用数字范围搜索字符串 "Phone No: 985634854"中的所有非数字字符,并删除它们。

$ echo "Phone No: 985634854" | tr -cd '0-9'

输出:

执行上述命令后会出现以下输出。该输出只包含字符串的数字部分。

同样,你可以在`tr`命令中使用**-cd选项,比如下面的命令,来删除文件中的不可打印的字符。\n "是一个不可打印的字符,将被从items.txt**文件中删除。

$ tr -cd "[:print:]" < items.txt

输出:

执行上述命令后会出现以下输出。该输出包含删除换行(\n)字符后的**items.**txt文件的内容。

例6:删除所有非数字字符

`tr`命令也可以通过使用[0-9]或[:digit:]的命令来删除文本中所有的非数字字符。运行下面的命令,使用[:digit:]类删除文本中的所有非数字字符。

$ echo "The product price 800 dollars" | tr -cd [:digit:]

输出:

执行上述命令后会出现以下输出。该输出只包含数字。

例7: 根据分隔符在单独一行打印$LS_COLORS的值

任何带有冒号(:)分隔符的环境变量的列表值都可以通过使用`tr`命令打印到单独的一行。$LS_COLORS是一个环境变量,包含冒号分隔的键和颜色值。运行下面的命令来打印每一行中的每个键和颜色对。

$ echo $LS_COLORS | tr  ':' '\n'

输出:

执行上述命令后会出现以下输出。

例8:根据分隔符转换文件的内容

创建一个名为 "students.txt"的文本文件,内容如下。冒号(:)已被用作该文件每一行的分隔符。

students.txt
Md. Hossain:CSE:Batch-50:Semester-10
Nibir Rahman:CSE:Batch-51:Semester-9
Mehnaz Kazi:CSE:Batch-52:Semester-8

运行下面的命令来打印文本文件的原始内容,用'/t'转换students.txt文件的冒号(:)来创建output.txt文件,并打印output.txt文件的内容。

$ cat students.txt
$ tr ':' '\t' < students.txt > output.txt
$ cat output.txt

输出:
执行上述命令后会出现以下输出。output.txt文件包含students.txt文件的转换内容。

结论

本教程通过各种例子解释了`tr`命令的基本用途。这里描述了通过使用这个命令的不同选项和模式来搜索、替换和删除文本或文件的部分的方法。