大小寫轉(zhuǎn)換
大小寫轉(zhuǎn)換是一個(gè)常用功能,每種語言通常都提供了支持,那么在shell中怎么進(jìn)行大小寫轉(zhuǎn)換呢?
- 大寫轉(zhuǎn)小寫
echo $TEXT | tr "[A-Z]" "[a-z]"
- 小寫轉(zhuǎn)大寫
echo $TEXT | tr "[a-z]" "[A-Z]"
TR命令解釋
tr可以非常容易地實(shí)現(xiàn) sed 的許多基本功能央渣。它可以用一個(gè)字符來替換另一個(gè)字符,或者可以完全除去一些字符渴频。
其命令格式為:
tr [option] ["string1"] ["string2"] < file
沒有任何選項(xiàng)的時(shí)候芽丹,tr默認(rèn)為替換操作,就是將string1在文件中出現(xiàn)的字符替換為string2中的字符卜朗,這里要注意的是替換關(guān)系拔第。
-c選項(xiàng),用string1中字符的補(bǔ)集替換string1场钉,這里的字符集為ASCII蚊俺。
-d選項(xiàng),刪除文件中所有在string1中出現(xiàn)的字符逛万。
-s選項(xiàng)泳猬,刪除文件中重復(fù)并且在string1中出現(xiàn)的字符,只保留一個(gè)宇植。
-c 選項(xiàng)這里需要解釋一下得封,我們來看一個(gè)例子:
? ~ echo "hello, my 2017" | tr -c "0-9" "*"
**********2017*%
TR命令字符串解釋
指定string或string2的內(nèi)容時(shí),只能使用單字符或字符串范圍或列表指郁。
- [a-z] a-z內(nèi)的字符組成的字符串忙上。
- [A-Z] A-Z內(nèi)的字符組成的字符串。
- [0-9] 數(shù)字串坡氯。
- \octal 一個(gè)三位的八進(jìn)制數(shù)晨横,對(duì)應(yīng)有效的ASCII字符。
- [On] 表示字符O重復(fù)出現(xiàn)指定次數(shù)n箫柳。因此[O2]匹配OO的字符串手形。
舉幾個(gè)栗子:
? ~ echo "hello world" | tr "a-z" "A-Z"
HELLO WORLD
? ~ echo "hello world" | tr "a-l" "A-Z"
HELLo worLD
? ~ echo "hello world" | tr "a-z" "A-H"
HEHHH HHHHD
最后一種情況需要注意,當(dāng)string2范圍比string1小的時(shí)候悯恍,會(huì)出現(xiàn)這種意料之外的情況库糠。
下面這種使用-s
去重。
? ~ echo "hello world,millions millions" | tr -s "l"
helo world,milions milions
? ~ echo "hello world,millions" | tr -s "a-z"
helo world,milions
? ~ echo "I'm 22 years old" | tr -s "0-9"
I'm 2 years old
想要去除空行可以使用tr -s "\n" < inputfile
這樣有單獨(dú)的"\n"就會(huì)被刪除。
使用-d
可以刪除出現(xiàn)的字符:
? ~ echo "I'm 22 years old" | tr -d "0-9"
I'm years old