【tr】

时间:2023-01-10 20:03:48
tr -c -d -s["string1_to_translate_from"] ["string2_to_trinpu tate_to"] ansl _file

-tr -用来从标准输入中通过替换或删除操作进行字符转换

用法:tr [选项]... SET1 [SET2]

(从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。)

-c, -C, --complement 首先补足SET1

-d, --delete 删除匹配SET1 的内容,并不作替换

-s, --squeeze-repeats 如果匹配于SET1 的字符在输入序列中存在连续的

重复,在替换时会被统一缩为一个字符的长度。多变一

-t, --truncate-set1 先将SET1 的长度截为和SET2 相等

--help 显示此帮助信息并退出

--version 显示版本信息并退出


SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:

\NNN 八进制值为NNN 的字符(1 至3 个数位)

\\ 反斜杠

\a 终端鸣响

\b 退格

\f 换页

\n 换行

\r 回车

\t 水平制表符

\v 垂直制表符

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


字符1-字符2 从 字符1到字符2 的升序递增过程中经历的所有字符

[字符*] 在SET2 中适用,指定字符会被连续复制直到吻合设置1 的长度

[字符*次数] 对字符执行指定次数的复制,若次数以 0 开头则被视为八进制数/octal

[:alnum:] 所有的字母和数字[0-9][a-z][A-Z]

[:alpha:] 所有的字母[a-z][A-Z]

[:blank:] 所有呈水平排列的空白字符

[:cntrl:] 所有的控制字符

[:digit:] 所有的数字[0-9]

[:graph:] 所有的可打印字符,不包括空格

[:lower:] 所有的小写字母[a-z]

[:print:] 所有的可打印字符,包括空格

[:punct:] 所有的标点字符

[:space:] 所有呈水平或垂直排列的空白字符

[:upper:] 所有的大写字母[A-Z]

[:xdigit:] 所有的十六进制数

[=字符=] 所有和指定字符相等的字符

[O*n] 表示字符O重复出现指定次数 n。因此[O*2]匹配OO的字符串


仅在SET1 和SET2 都给出,同时没有-d 选项的时候才会进行替换。

仅在替换时才可能用到-t 选项。如果需要SET2 将被通过在末尾添加原来的末字符的方式

补充到同SET1 等长。SET2 中多余的字符将被省略。只有[:lower:] 和[:upper:]

以升序展开字符;在用于替换时的SET2 中以成对表示大小写转换。-s 作用于SET1,既不

替换也不删除,否则在替换或展开后使用SET2 缩减。


1.去除重复出现的字符

$ tr -s "[a-z]" <file


2.删除空行

$ tr -s "\n" <file

$ tr -s "[\012]" <file


3.大写到小写

$ tr "[A-Z]" "[a-z]" <file

$ tr [:upper:] [:lower:] <file


4.小写到大写

$ tr "[a-z]" "[A-Z]" <

$ tr [:lower:] [:upper:] <file


5.删除指定字符

$ tr -cs "[a-z][A-Z]" "[\012*]" <file --删除所有数字


6.转换控制字符

$ tr -s " " "\-" <file --空格转换为'-'

$ tr -s " " "-" <file