linux tr命令详解

tr (translate) 命令在 Linux 中主要用于翻译和删除字符。可用于大写转小写、压缩重复字符和删除字符。

Tr 命令需要两组字符进行转换,也可以与使用 Unix 管道的其他命令一起使用以进行高级翻译。

在本教程中,我们将通过一些示例了解如何在 Linux 操作系统中使用 tr 命令。

tr 命令和语法

Tr 命令使用以下语法,需要两组字符才能操作。

tr [选项] "SET1" "SET2"

其中 SET 是一组字符。您使用解释序列,列出了其中的一些。

\NNN -> 八进制值 NNN 的字符(1 到 3 个八进制数字)

\\ -> 反斜杠

\n -> 新行

\r -> 返回

\t -> 水平标签

[:alnum:] -> 所有字母和数字

[:alpha:] -> 所有字母

[:blank:] -> 所有水平空白

[:cntrl:] -> 所有控制字符

[:digit:] -> 所有数字

[:lower:] -> 所有小写字母

[:upper:] -> 所有大写字母

可以应用以下 tr 语法的3种方法:

echo "something to translate" | tr  "SET1" "SET2"
tr "SET1" "SET2" < file-to-translate
tr "SET1" "SET2" < file-to-translate > file-output

Tr 选项是:

-c-C--complement– >补的字符集“SET1"
-d--delete– >在SET1删除字符。
-s--squeeze-repeats– >替换了在SET1列出与该字符的单个发生重复字符的每个输入序列。

小写转大写

我们可以使用 tr 进行大小写转换,即将句子或单词从小写转换为大写,反之亦然。

您可以[:lower:] [:upper:]"a-z" "A-Z"将小写字母转换为大写字母。

以下示例将字符从小写转换为大写,并在标准输出上打印结果。

$ sudo echo "change me to capital letter" | tr [:lower:] [:upper:] 
CHANGE ME TO CAPITAL LETTER

此示例翻译名为“input.txt”的文件的内容,并仅在控制台的标准输出中打印结果。

$ sudo cat input.txt
Can you see how command can be wonderful?

$ sudo tr "a-z" "A-Z" < input.txt
CAN YOU SEE HOW COMMAND CAN BE WONDERFUL?

$ sudo cat input.txt
Can you see how command can be wonderful?

下面将’input.txt’中的内容转换为大写并保存到一个名为’output.txt’的文件中

$ sudo tr "a-z" "A-Z" < input.txt > output.txt

$ sudo cat output.txt
CAN YOU SEE HOW COMMAND CAN BE WONDERFUL?

tr 命令大小写转换
注意:sed 命令具有与ytr 类似的选项,将“set1”中所有出现的字符替换为“set2”中的相应字符。

删除字符

-d选项用于删除所有出现的已指定字符。让我们-d通过示例检查不同的选项。

以下命令将从第一组中删除所有出现的字符“cawe”。

$ sudo echo "Can you see how command can be wonderful?" | tr -d "cawe?" 
Cn you s ho ommnd n b ondrful

以下命令将从句子中删除所有数字:

Note[:digit:]代表所有数字字符。

$ sudo echo "Remove my id number 567893" | tr -d [:digit:]

输出

Remove my id number

以下命令将从文本文件中删除换行符

$ sudo tr -d '\n' < file1.txt
or
$ sudo tr -d '\012' < file1.txt

去除不匹配的字符(补)

使用-c选项,您可以用另一组字符替换不匹配的字符。

在以下示例中,它将所有不匹配的字符 ‘bc123d56E’ 替换为 ‘t’。

$ sudo echo "Abc123d56E" | tr -c 'A' 't'
Atttttttttt

另一个我们只想从一组字符中提取数字的实时示例:

$ echo "My year of birth is 1975" | tr -cd [:digit:]
Output
1975

将空白转换为制表符

我们可以使用 tr 命令将所有空白转换为制表符,将 tr 与[:space:]和 一起应用\t

检查以下示例

$ sudo echo "I need more space" | tr [:space:] '\t'
Output
I       need    more    space

压缩重复字符

使用-s选项我们可以挤压重复出现的字符。

在以下示例中,重复空格(连续)被转换为单个空格。

$ sudo echo "I am so        wide" | tr -s " "
I am so wide

或者

$ sudo echo "I am so        wide" | tr -s '[:space:]' '#'
I am so wid

在这里,我们删除连续空格并在所有单个空格中放置字符“#”。

sudo echo "I am so            wide" | tr -s '[:space:]' '#'
I#am#so#wide#

转换为单个换行符

以下将每个空格序列转换为单个换行符。

Note[:alpha:]代表所有字母。

$ sudo cat file
Can you see how command can be wonderful

$ sudo cat file | tr -s "[:alpha:]" "\n"
Can
you
see
how
command
can
be
wonderful
$

从文件中生成唯一词列表

这是一个非常有用的实际示例,我们可以使用 tr 从文件中生成唯一的单词。

$ sudo cat file
unique1 unique1 unique2 unique3 unique4 unique4
$sudo cat file | tr -cs "[:alnum:]" "\n" | sort | uniq -c | sort -rn
      2 unique4
      2 unique1
      1 unique3
      1 unique2
$

使用 ROT 编码字母

ROT(Caesar 密码)是一种密码学,其中通过将字母表中的字母移动到下一个字母来完成编码。

让我们来看看如何使用 tr 进行加密。

在以下示例中,第一组中的每个字符都将替换为第二组中的相应字符。

指定的第一个集合是 [az],这意味着abcdefghijklmnopqrstuvwxyz. 第二个是 [n-za-m],它变成pqrstuvwxyzabcdefghijklmn.

tr 'a-z' 'p-za-n'

显示上述理论的简单命令:

$ sudo echo 'abg' | tr 'ab' 'ef'
Output
efg

当您需要加密电子邮件时,这非常有用。检查下面

$ sudo echo 'cryptography@example.com' | tr 'A-Za-z' 'N-ZA-Mn-za-m'

输出

pelcgbtencul@rknzcyr.pbz

结论

当使用 Unix 管道时,这是一个非常强大的linux 命令,并且在 shell 脚本中非常常用。

您可以随时参考手册页以获取有关此命令行实用程序的更多信息。如果您有任何问题或反馈,请随时发表评论。

linux rsync命令详解
如何在Linux Shell脚本输出中插入换行字符

发表我的评论

电子邮件地址不会被公开。 必填项已用*标注

89 + 2 =

ajax-loader