Linux中的tr命令举例说明
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