了解Linux/UNIX tr命令

时间:2020-01-09 10:39:52  来源:igfitidea点击:

问题描述:能否解释tr命令以及如何在Linux/UNIX上像oses一样使用它?

解决方法:tr实用程序将给定的输入复制到产生的输出中,以替换或删除所选字符。

tr缩写为翻译或音译。
它以两组字符为参数,并用另一组中的相应元素替换第一组中出现的字符,即用于翻译字符。
它通常用于shell脚本和其他应用程序中。

tr命令语法

tr [options] "set1" "set2"
echo something | tr "set1" "set2"
tr "set1" "set2" < input.txt
tr "set1" "set2" < input.txt > output.txt

在Linux/UNIX下如何使用tr命令?

将单词linux转换为大写:

$ echo 'linux' | tr "[:lower:]" "[:upper:]"
$ echo 'linux' | tr "a-z" "A-Z"
$ echo 'I LovE linuX. one is better Than 2' | tr "a-z" "A-Z"

输出:

LINUX
I LOVE LINUX. ONE IS BETTER THAN 2

在/path/to/file中创建单词列表,每行一个,执行:

$ tr -cs "[:alpha:]" "\n" < /path/to/file

其中:

  • -c:补充string1中的字符集
  • -s:用一次出现的字符替换SET1中列出的重复字符的每个输入序列

Shell脚本示例

在以下示例中,您将在删除文件之前得到确认。
如果用户使用小写字母响应,tr命令将不执行任何操作,但是如果用户使用大写字母响应,则字符将更改为小写字母。
这将确保即使用户回答"是","是","是"等;脚本应删除文件:

#!/bin/bash
echo -n "Enter file name : "
read myfile
echo -n "Are you sure ( yes or no ) ? "
read confirmation
confirmation="$(echo ${confirmation} | tr 'A-Z' 'a-z')"
if [ "$confirmation" == "yes" ]; then
   [ -f $myfile ] &&  /bin/rm $myfile || echo "Error - file $myfile not found"
else
   : # do nothing
fi

从myfile.txt中删除所有不可打印的字符

$ tr -cd "[:print:]" < myfile.txt

从名为input.txt的文件的文本副本中删除所有另外两个连续的空格,并将输出保存到名为output.txt的新文件中

tr -s ' ' ' ' < input.txt > output.txt

-d选项用于删除set1中指定的字符串的每个实例(即,字符序列)。
例如,以下操作将从名为/etc/resolv.conf的文本副本中删除名称服务器一词的每个实例,并将输出写入名为ns.ipaddress.txt的文件中:

tr -d 'nameserver' < /etc/resolv.conf > ns.ipaddress.txt