Skip to main content
 首页 » 操作系统

Linux tr 命令示例教程

2022年07月19日140xing901022

tr 即 translation ,该命令把字符串从一种类型转换为另一种类型。比如,从小写转成大写。

tr命令非常简单,但没有 awksed 命令强大。

语法

tr [options] charset1 [charset2] 

命令选项及解释:

  • -d : 删除第一个集合中的字符
  • -c : 第一字符集补集,即非操作
  • -s : 删除第一集合中连续出现的字符
  • -t : truncate the first set

下面通过实例进行解释。

大小写转换

首先我们看实例文件:

~$ cat sample.txt 
This is my life 
and my file 

现在转换文本为大写:

cat sample.txt | tr 'a-z' 'A-Z' 
# 输出 
THIS IS MY LIFE 
AND MY FILE 
 
# 转换小写 
cat sample.txt | tr 'A-Z' 'a-z' 

字符串替换

上面对字符进行转换,同样也可以替换字符,替换操作是逐个进行:

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。

删除字符

如果要删除特定字符,可以使用 -d 选项:

~$ cat sample.txt | tr -d ‘is’ 
# 输出 
Th my lfe 
and my fle 

上面示例中,所有 i 和 s 都被删除,如果你认为只有 is 被删除,那就理解错了。这就是为什么 sed 命令 处理字符串更好的原因。

删除重复字符

如果文本中有多个空白字符,我们想仅保留一个,可以使用 -s 选项实现:

~$ echo “Text has  too many  spaces” | tr -s ” “ 
# 输出 
Text has too many spaces 

也可以使用其他字符代替前面连续出现的字符:

~$ echo “Text has too many spaces” | tr -s ” ” “;# 输出 
Text;has;too;many;spaces 

这里用; 代替空白字符。

删除所有非数字字符

如果文本中包括数字和文本,我们需要仅保留数字。可以使用 -c 和 -d 选项:

~$ echo “Phone number is 123456789” | tr -cd [:digit:] 
# 输出 
123456789 

即把第一个字符集中的非数字字符删除。

截取搜索模式

我们先看示例,这里i 被1 替换, s,e,f 都被替换为2 :

~$ cat sample.txt | tr ‘isef’ ’12’ 
# 输出 
Th12 12 my l122 
and my 21l2 

现在加上 选项 -t ,则 is 被替换,而 e f 保持不变。

~$ cat sample.txt | tr -t ‘isef’ ’12’ 
# 输出 
Th12 12 my l1fe 
and my f1le 

总结

本文介绍 tr 命令,并给了一些示例进行介绍其选项。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/118076917