概述
使用tr命令可以對輸入的字符串的字符進行替換白嘁、壓縮和刪除(使用-d選項)养晋,需要注意的是旭贬,每個替換行為是根據原字符串進行的,也可以理解成是同時一一替換玉雾,而不是等待第一個字符替換完了再替換下一個退客。下圖說明
image
# echo "helloc,world" | tr 'lo' 'oe' //l替換o后遥椿,那候些替換過來的o不會替換為e
heooec,werod
命令格式
tr [-cdst][--help][--version][第一字符集][第二字符集]
tr [OPTION]…SET1[SET2]
參數說明:
- 字符集1:指定要轉換或刪除的原字符集瑞佩。當執(zhí)行轉換操作時楣责,必須使用參數“字符集2”指定轉換的目標字符集竣灌。但執(zhí)行刪除操作時聂沙,不需要參數“字符集2”;
- 字符集2:指定要轉換成的目標字符集初嘹。
'A-Z' 和 'a-z'都是集合及汉,集合是可以自己制定的,例如:'ABD-}'屯烦、'bB.,'坷随、'a-de-h'、'a-c0-9'都屬于集合驻龟,集合里可以使用'\n'温眉、'\t',可以可以使用其他ASCII字符翁狐。
- -c, --complement:反選設定字符类溢。也就是符合 SET1的部份不做處理,不符合的剩余部份才進行轉換
- -d, --delete:刪除指令字符
- -s, --squeeze-repeats:縮減連續(xù)重復的字符成指定的單個字符
- -t, --truncate-set1:削減 SET1 指定范圍露懒,使之與 SET2 設定長度相等,然后SET1中的字符替換成SET2字符
實例
刪除數字
# echo "1234abcd" | tr -d [:digit:]
abcd
刪除特定字符
# echo "1234567843ab,cd" | tr -d 34
125678ab,cd
反向刪除
# echo "1234567843ab,cd" | tr -Cd 34
3443
將制表符轉換為空格
cat text | tr '\t' ' '
縮減連續(xù)重復的字符成指定的單個字符
# echo "123333a4444ab,cd" | tr -s 34 zs //將連續(xù)的3和4分別替換成單個z好s
12zasab,cd
小寫轉大寫
# echo "hello,world" | tr a-z A-Z
HELLO,WORLD
# echo "hello,world" | tr [:lower:] [:upper:]
HELLO,WORLD
# echo "hello,world" | tr a-z A-Z
HELLO,WORLD
# echo "hello,world" | tr [:lower:] [:upper:]
HELLO,WORLD
刪除Windows文件“造成”的'^M'字符
cat file | tr -s "\r" "\n" > new_file
或
cat file | tr -d "\r" > new_file
# echo "helloc,world" | tr -t 'lowc' 'oe' //將lowc截斷成lo闯冷,然后將字符串中l(wèi)替換成o,o替換成e,需要注意的是隐锭,每個替換行為是根據原字符進行的
heooec,werod
tr --help
Usage: tr [OPTION]... SET1 [SET2]
Translate, squeeze, and/or delete characters from standard input,
writing to standard output.
-c, -C, --complement use the complement of SET1
-d, --delete delete characters in SET1, do not translate
-s, --squeeze-repeats replace each input sequence of a repeated character
that is listed in SET1 with a single occurrence
of that character
-t, --truncate-set1 first truncate SET1 to length of SET2
--help display this help and exit
--version output version information and exit
SETs are specified as strings of characters. Most represent themselves.
Interpreted sequences are:
\NNN character with octal value NNN (1 to 3 octal digits)
\\ backslash
\a audible BEL
\b backspace
\f form feed
\n new line
\r return
\t horizontal tab
\v vertical tab
CHAR1-CHAR2 all characters from CHAR1 to CHAR2 in ascending order
[CHAR*] in SET2, copies of CHAR until length of SET1
[CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0
[:alnum:] all letters and digits
[:alpha:] all letters
[:blank:] all horizontal whitespace
[:cntrl:] all control characters
[:digit:] all digits
[:graph:] all printable characters, not including space
[:lower:] all lower case letters
[:print:] all printable characters, including space
[:punct:] all punctuation characters
[:space:] all horizontal or vertical whitespace
[:upper:] all upper case letters
[:xdigit:] all hexadecimal digits
[=CHAR=] all characters which are equivalent to CHAR
Translation occurs if -d is not given and both SET1 and SET2 appear.
-t may be used only when translating. SET2 is extended to length of
SET1 by repeating its last character as necessary. Excess characters
of SET2 are ignored. Only [:lower:] and [:upper:] are guaranteed to
expand in ascending order; used in SET2 while translating, they may
only be used in pairs to specify case conversion. -s uses SET1 if not
translating nor deleting; else squeezing uses SET2 and occurs after
translation or deletion.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'tr invocation'