`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的文本文件,内容如下:
- 监视器
- 键盘
- 鼠标
- 扫描仪
- 硬盘
从终端运行以下命令,显示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`命令的基本用途。这里描述了通过使用这个命令的不同选项和模式来搜索、替换和删除文本或文件的部分的方法。