https://blog.csdn.net/u013332124/article/details/93654007
一寺酪、cut命令學(xué)習(xí)
cut命令主要用來切割字符串,可以對(duì)輸入的數(shù)據(jù)進(jìn)行切割然后輸出盼产,它可以支持三種形勢的切割:
- 按字節(jié)(bytes)進(jìn)行切割
- 按字符進(jìn)行切割
- 按指定的分割符進(jìn)行切割
在linux中,一些特殊字符(比如中文)會(huì)占多個(gè)字節(jié)鲤屡,所以,通過字節(jié)分割和通過字符分割是不同的,這一點(diǎn)要搞清楚。
按字節(jié)進(jìn)行切割
通過-b
參數(shù)憨栽,我們可以按字節(jié)來切割字符串,使用命令格式如下:
cut [-n] -b List inputfile
# 獲取第1個(gè)和第3個(gè)字節(jié).
# 輸出: hl
echo "hello world" | cut -b 1,3
# 獲取第1個(gè)到第3個(gè)之間的字節(jié)
# 輸出: hel
echo "hello world" | cut -b 1-3
# 如果有中文字符翼虫,就無法很好的通過-b來獲取
# 輸出: ?
echo "h和o" | cut -b 2
# 輸出(一個(gè)中文漢字占3個(gè)字節(jié)): 和
echo "h和o" | cut -b 2-4
# 加上 -n 屑柔,遇到這種多個(gè)字節(jié)組成的字符就只會(huì)在最后一個(gè)字節(jié)處才會(huì)輸出
# 輸出(輸出空字符): ""
echo "h和o" | cut -n -b 2
# 輸出(第四個(gè)字節(jié)剛好是最后一個(gè)字節(jié)): 和
echo "h和o" | cut -n -b 4
按字符進(jìn)行切割
通過-c
參數(shù),我們可以按字符來切割字符串珍剑,使用命令格式如下:
cut -c List inputfile
# 獲取第1個(gè)和第3個(gè)字符.
# 輸出: hl
echo "hello world" | cut -c 1,3
# 獲取第1個(gè)到第3個(gè)之間的字符
# 輸出: hel
echo "hello world" | cut -c 1-3
# 帶中文也可以輸出
# 輸出: 和
echo "h和o" | cut -c 2
按指定字符進(jìn)行切割
通過-d
和-f
配合掸宛,我們可以按指定字符來分割字符串,使用命令格式如下:
cut -d 'DELIM' -f LIST
# 按 "," 號(hào)分割招拙,并輸出第一列和第三列
# 輸出: hello,ok
echo "hello,world,ok" | cut -d , -f 1,3
# 按 "," 號(hào)分割唧瘾,并輸出第1到第三列之間的數(shù)據(jù)
# 輸出: world,ok
echo "hello,world,ok" | cut -d , -f 2-3
二、tr 命令學(xué)習(xí)
tr 命令主要用來替換字符别凤。它的原理是對(duì)輸入的數(shù)據(jù)按字符進(jìn)行替換或者刪除(也只能按字符來饰序,不能根據(jù)單詞來做替換)。
tr有幾個(gè)常用的參數(shù):
-
-c
:通過指定字符的補(bǔ)集來替換字符串(也就是反向匹配) -
-d
:刪除字符 -
-s
:對(duì)連續(xù)重復(fù)的字符進(jìn)行去重 -
-t
:忽略SET1中多出的字符
替換字符使用demo
tr會(huì)根據(jù)傳入的兩個(gè)SET的字符順序來替換字符串规哪,比如SET1的第一個(gè)字符是a,SET2的第一個(gè)字符是x求豫。那么tr在運(yùn)行時(shí)會(huì)將所有的a字符替換成x字符
# 根據(jù)字符的順序進(jìn)行匹配替換:h->x e->y l->c
# 輸出: xyzzo worzd
echo "hello world" | tr "hel" "xyz"
# 如果SET2的length沒有SET1,就會(huì)自動(dòng)用SET2的最后一位補(bǔ)上
# 輸出: xxxxo worxd
echo "hello world" | tr "hel" "x"
-c诉稍,-d 參數(shù)使用demo
# 去除數(shù)字外的所有字符蝠嘉。-d表示刪除匹配的字符,-c表示反向匹配
# 輸出: 123
echo "hello 123 world" | tr -c -d "0-9"
# 沒加-c的話輸出: hello world
echo "hello 123 world" | tr -d "0-9"
-s 參數(shù)使用demo
# 去除連續(xù)重復(fù)的字符
# 輸出: heo o aa
echo "hello ll aa" | tr -s "l" "o"
-t 參數(shù)使用demo
# 去除SET1多余的字符
# 沒加-t前均唉,輸出: xxxxo worxd
echo "hello world" | tr "hel" "x"
# 加了-t是晨,輸出: xello world
echo "hello world" | tr -t "hel" "x"
tr中的一些轉(zhuǎn)義符
所有的轉(zhuǎn)義符如下:
\NNN 八進(jìn)制值的字符 NNN (1 to 3 為八進(jìn)制值的字符)
\\ 反斜杠
\a Ctrl-G 鈴聲
\b Ctrl-H 退格符
\f Ctrl-L 走行換頁
\n Ctrl-J 新行
\r Ctrl-M 回車
\t Ctrl-I tab鍵
\v Ctrl-X 水平制表符
[:alnum:] 所有的字母和數(shù)字
[:alpha:] 所有字母
[:blank:] 水平制表符,空白等
[:cntrl:] 所有控制字符
[:digit:] 所有的數(shù)字
[:graph:] 所有可打印字符舔箭,不包括空格
[:lower:] 所有的小寫字符
[:print:] 所有可打印字符罩缴,包括空格
[:punct:] 所有的標(biāo)點(diǎn)字符
[:space:] 所有的橫向或縱向的空白
[:upper:] 所有大寫字母
demo:
# 所有小寫字符轉(zhuǎn)大寫字符(兩種方式)
# 輸出: HELLO
echo "heLlo" | tr "[:lower:]" "[:upper:]"
echo "heLlo" | tr [a-z] [A-Z]
三、總結(jié)
其實(shí)cut和tr命令和awk與sed很像层扶。cut基本就是awk的簡單版本箫章,而tr就是sed的簡單版本。雖然awk和sed的功能很強(qiáng)大镜会,但是一些比較簡單的場景檬寂,其實(shí)使用cut和tr就足夠了。