tr 即 translation ,该命令把字符串从一种类型转换为另一种类型。比如,从小写转成大写。
tr命令非常简单,但没有
awk
或sed
命令强大。
语法
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