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?
注意:sed 命令具有与y
tr 类似的选项,将“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 脚本中非常常用。
您可以随时参考手册页以获取有关此命令行实用程序的更多信息。如果您有任何问题或反馈,请随时发表评论。
😁