在Linux中使用tr命令

时间:2020-02-23 14:40:36  来源:igfitidea点击:

Linux中的tr命令将一组字符转换为另一组字符。
它可以用另一个字符或者一组字符替换一个字符或者一组字符。
tr从标准输入中读取输入,并在标准输出上显示输出。
输入也可以在文件中或者使用echo命令给出。

tr是翻译(translate)的缩写。

tr命令的标准格式为:

$tr [option] [char_set 1] [char_set 2]

根据指定的选项,tr命令将" set 1"中的字符集替换为" set 2"。

替换字符

要使用tr命令替换字符,只需提及要在第一组中替换的字符以及要在第二组中替换后放置的字符。

$tr 'a' '1'

该命令将等待来自STDIN的输入。
获得输入后,屏幕上将显示输出,所有实例" a"均替换为" 1"。

1.在tr命令中使用echo

上面的示例从STDIN读取输入。
Echo命令可以与tr命令一起提供输入。
使用Pipe(|)运算符一起运行命令。

$ echo "apples and bananas" | tr 'a' '1'

2.从文件中获取输入

tr还可以从文件获取其输入。
当要在大量文本上进行翻译时,这很有用。
重定向(<)运算符用于提供文件输入。

$tr 'a' '1' < input.txt

input.txt包含与上面的示例相同的文本。

要将文本保存到文件,请使用redirection(>)运算符将输出重定向到文件。

$tr 'a' '1' < input.txt > output.txt

使用tr命令更改文本大小写

tr命令最常见的用途之一是将文本从小写转换为大写,反之亦然。

当tr在字符集上工作时,我们可以明确地将小写字符集(第1组)和大写字符集(第2组)进行切换。

$echo "apples and bananas" | tr a-z A-Z

集合a-z代表小写字母的集合,集合A-Z代表大写字母的集合。

另一种方法是:

$echo "apples and bananas" | tr [:lower:] [:upper:]

其中[:lower:** 代表小写字母集,[:upper:** 代表大写字母集。

用tr删除字符

tr可以从文本中删除一组字符。
这是通过将tr与-d命令一起使用来实现的。

$ echo "apples and bananas" | tr -d 'n'

此命令将消除文本中所有出现的" n"。

要删除出现多个字符的情况,请在单引号中提及所有字符。

$ echo "apples and bananas" | tr -d 'na'

此命令将删除出现的" n"和" a"

由于tr在字符级别起作用,因此所有出现的" n"和" a"都将被删除。
容易被误认为是该命令只会删除按此顺序出现的" na"。
但是,事实并非如此。

将多个事件压缩为一个

将多个事件压缩为一个可能有助于压缩文本。
它通常用于删除行之间的多个空格的实例。

-s选项与tr一起使用。

$echo "apples and bananas" | tr -s 'p'

苹果中多次出现的" p"已减少为一次。

$ echo "apples and bananas" | tr -s 'na' '1'

此命令的输出等效于首先将出现的字符" n"和" a"替换为" 1",然后进行挤压操作。
要进行比较,请看输出中的第二个命令。
第二个命令的结果是简单的字符替换。

让我们在第二个命令的输出中挤压所有1,以查看是否获得与第一个相同的输出。

我们得到的输出与输出中的第一个命令相同。

要删除文本中的连续空格,请使用:

$ echo "apples    and    bananas" | tr -s " " 

或者,可以使用[:space:** 代替""

$echo "apples    and    bananas" | tr -s [:space:]

从文本中提取数字

要实现仅需要保留一组特定字符的操作。
最好使用-c选项。
-c用于补充集合。

集合的补码是指该集合以外的所有内容。

$echo " Home : 011 1234 4321" | tr -cd [:digit:],'\n' 

提及" \ n"(换行符)很重要,因为否则输出将没有换行符,并与终端中的下一行混淆。
删除字符时不忽略换行符的另一个原因是,您的文件可能在多行中有多个数字。
如果删除了换行符,则所有数字将一起显示而没有任何空格。

没有" \ n"

从文本中提取单词

此过程与上述过程完全相反。
其中我们将忽略数字,仅关注字母组成的单词。

$echo " Home : 011 1234 4321" | tr -d [:digit:]

在此示例中,我们仅删除了文本外的所有数字。

更好的控制方法是通过补码。

$echo " Home : 011 1234 4321" | tr -cd [:alpha:],'\n'

[:alpha:** 代表一组字母。
可以将其视为上下两个集合的集合。

[:alpha:] = [:lower:] + [:upper:]

计算单词出现的次数

计算单词在文本中出现的次数对于构建直方图很有用。
在建立概率模型以检测电子邮件垃圾邮件时,它也非常有用。

首先,我们创建一个包含一些重复单词的文件。

有时在换行中显示文本的每个单词会很有用。

$tr -cs "[:alpha:]" "\n" < input.txt

列表继续。
输出已缩短以适合

要获取每个单词的出现次数,请使用:

$tr -cs "[:alpha:]" "\n" < input.txt | sort | uniq -c

Sort用于按字典顺序对列表进行排序。
uniq -c计算每个单词的出现次数,并将结果输出为带有计数的单词列表。