tr [OPTION]... SET1 [SET2]
功能
转换或者删除字符。
描述
tr
指令从标准输入设备读取数据,经过字符串转译后,输出到标准输出设备。
通过使用 tr
,您可以非常容易地实现 sed
的许多最基本功能。您可以将 tr
看作为 sed
的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr
所能够做的。
tr
用来从标准输入中通过替换或删除操作进行字符转换。 tr
主要用于删除文件中控制字符或进行字符转换。使用 tr
时要转换两个字符串:字符串1用于查询,字符串2用于处理各种转换。 tr
刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
参数:
-
-c
或--complerment
取代所有不属于第一字符集的字符。 -
-d
或--delete
删除所有属于第一字符集的字符。 -
-s
或--squeeze-repeats
把连续重复的字符以单独一个字符表示。 -
-t
或--truncate-set1
这个比较难理解,man
上面的解释是:first truncate SET1 to length of SET2
,经过我的实践发现,将set1
的字符依次替换成set2
中的字符,如果set1
中的字符数目超过set2
,那么set1
多出的字符忽略。如果没有-t
,那么多出的字符都替换成set2
的最后一个字符。 -
--help
在线帮助。 -
--version
显示版本信息。
字符范围
指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
-
[a-z]
a-z
内的字符组成的字符串。 -
[A-Z]
A-Z
内的字符组成的字符串。 -
[0-9]
数字串。 -
\octal
一个三位的八进制数,对应有效的ASCII字符。 -
[O*n]
表示字符O重复出现指定次数n。因此[O*2]
匹配OO
的字符串。tr
中特定控制字符的不同表达方式
速记符含义八进制方式
- \a Ctrl-G 铃声\007
- \b Ctrl-H 退格符\010
- \f Ctrl-L 走行换页\014
- \n Ctrl-J 新行\012
- \r Ctrl-M 回车\015
- \t Ctrl-I tab键\011
- \v Ctrl-X \030
举例
压缩文件test内容中重复的字符为一个
$tr -s [a-z]
这样,会把文件中每一行的, Set1([a-z])
字符串中的重复字符压缩为一个,并把处理的结果打印到标准输出,原来的文件不变。
注意这里, set1
集合(也就是第一个参数 [a-z]
)中指定的是字符集合,而不是字符串,所以这里做的是把单个字符的重复给压缩为一个,而不是字符串重复。
例如 test
有一行是 tttt.tgz
,那么会变成 t.tgz
,但是 hellohellohello
会变成 helohelohelo.
去掉文件中多余的空行
$tr -s "[\012]" < test
或
$tr -s ["\n"]
这里,假设原来文件 test
的内容是:
111
222
333
444
运行之后,标准输出:
111
222
333
444
而原来文件的内容不会改变。
删除文件中的 ^M
,并代之以换行
$tr -s "[\015]" "[\n]"
或
$tr -s "[\r]" "[\n]
一般来说, windows
上面编辑的文件拿到 linux
上面来没行的结尾可以会有这样的符号,实际上直接 cat
也看不出 ^M
符号。
替换文件 test
中所有冒号,代之以逗号
$tr -s "[:]" "[,]"
或
$tr -s ":" ","
显示 $PATH
变量将 :
变成回车
$echo $PATH | tr ":" "\n"
这里,用 echo $PATH
或者 echo $LD_LIBRARY_PATH
等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr
命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了.
以上命令在 vi
中进行处理
1,$!tr -s ":" ","
这样,会直接修改 vi
编辑的文件,可以在 vi
内使用所有这些命令!
只要记住:在 tr
命令前要加上您希望处理的行范围和感叹号 ( !
),如
1,$!tr -d '\t'
这里,美元符号表示最后一行。
替换第一个参数字符集之外的字符为指定字符
tr -c [boy] "k"
输入之后,输出如下:
kkkkokboykkookk
这里,会把属于第一个参数的字符集中的字符之外的所有,都替换成第二个参数对应的字符。第二个参数必须是单个字符,如果是多个字符,则取最后一个,例如 ka
等价于 a
.
使用 cat trTest
查看文件的内容如下:
hello
boy
good
删除 set1
字符集指定的字符
$tr -d bld
或
$tr -d [bld]
输入之后,输出如下:
heo
oy
goo
这样,会删除 trTest
文件中的所有 bld
三个字符。这里使用 cat
查看 trTest
文件内容如下:
$cat trTest
hello
boy
good
把文件中的小写字符转换成大写的
$tr a-z A-Z
或
$tr [a-z] [A-z]
输入之后,输出如下:
111
222
HELLO
这里, testTr
内容如下:
111
222
hello
使用 -t
替换字符, set1
超出 set2
的部分忽略
$tr -t hld boy < trTest
输入之后,输出如下:
beooo
boy
gooy
这样,会依次把 h
, l
, d
替换成 b
, o
, y
如果是 hldg
那么多出来的字符 g
忽略,如果没有 -t
那么多出来的所有字符被替换成 boy
的最后一个字符 y
这里 trTest
文件的内容:
$cat trTest
hello
boy
good
网友评论