shell字串擷取(cut)

2021-08-04 22:36:46 字數 3069 閱讀 4042

字串擷取操作cut,cut以行為單位進行操作。

cut命令主要是接受三個定位方法:

第一,位元組(bytes),用選項-b

第二,字元(characters),用選項-c

第三,域(fields),用選項-f

-b,下面**塊中詳述-b操作

//目標操作串-b

[lj@localhost script]$ ps

pid tty time cmd

2729 pts/0

00:00:00 bash

2888 pts/0

00:00:00 vim

6145 pts/0

00:00:00 ps

1. 按行操作,取每行第1-8個字元

[lj@localhost script]$ ps|cut -b 1-8

pid tt

2729 pt

2888 pt

6146 pt

6147 pt

2. -b支援形如3-5的寫法,而且多個定位之間用逗號隔開就成了

[lj@localhost script]$ ps|cut -b 1-8,11

pid tt

2729 pt0

2888 pt0

6151 pt0

6152 pt0

但有一點要注意,cut命令如果使用了-b選項,那麼執行此命令時,cut會先把-b後面所有的定位進行從小到大排序,然後再提取。不能顛倒定位的順序

[lj@localhost script]$ ps|cut -b 11,1-8

pid tt

2729 pt0

2888 pt0

6153 pt0

6154 pt0

3. -3表示從第乙個位元組到第三個位元組,而3-表示從第三個位元組到行尾。如果你細心,你可以看到這兩種情況下,都包括了第三個位元組。

[lj@localhost script]$ ps|cut -b -3p27

2861

61 [lj@localhost script]$ ps|cut -b 3-

pid tty time cmd

729 pts/0

00:00:00 bash

888 pts/0

00:00:00 vim

157 pts/0

00:00:00 ps

158 pts/0

00:00:00 cut

[lj@localhost script]$ ps|cut -b -3,3-//執行ps|cut -b -3,3-,答案是輸出整行,不會出現連續兩個重疊的c的

pid tty time cmd

2729 pts/0

00:00:00 bash

2888 pts/0

00:00:00 vim

6159 pts/0

00:00:00 ps

6160 pts/0

00:00:00 cut

-c

按照字元來操作,雖然都是對字串的操作,但是例如中文每個字元就不是乙個位元組,所以-c操作與-b有所區別,但其操作寫法和-b一致

//目標操作串

[lj@localhost script]$ cat cut_exp.txt

中華人民共和國

中華人民共和國

中華人民共和國

[lj@localhost script]$ cat cut_exp.txt|cut -c 3-

人民共和國

人民共和國

人民共和國

-f

為什麼會有「域」的提取呢,因為剛才提到的-b和-c只能在固定格式的文件中提取資訊,而對於非固定格式的資訊則束手無策。這時候「域」就派上用場了。

(下面的講解內容是在假設你對/etc/passwd檔案的內容和組織形式比較了解的情況下進行的。)

如果你觀察過/etc/passwd檔案,你會發現,它並不像who或者ps的輸出資訊那樣具有固定格式,而是比較零散的排放。但是,冒號在這個檔案的每一行中都起到了非常重要的作用,冒號用來隔開每乙個項。

我們很幸運,cut命令提供了這樣的提取方式,具體的說就是設定「間隔符」,再設定「提取第幾個域」,就ok了!

//以/etc/passwd的前五行內容為例:

[lj@localhost script]$ cat /etc/passwd|head -n 5

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[lj@localhost script]$ cat /etc/passwd|head -n 5|cut -d : -f 1

root

bindaemon

admlp

//-d設定間隔符為冒號,然後用-f來設定我要取的是第乙個域,再按回車,所有的使用者名稱就都列出來了,在設定-f時,也可以使用例如3-5或者4-類似的格式

如果遇到空格和製表符時,有時候製表符確實很難辨認,有乙個方法可以看出一段空格到底是由若干個空格組成的還是由乙個製表符組成的。

[lj@localhost script]$ cat cut_space.txt

this

is tab finish.

this

is several space finish.

[lj@localhost script]$ sed -n l cut_space.txt

this

is tab\tfinish.$

this

is several space finish.$

如上,如果是製表符(tab),那麼會顯示為\t符號,如果是空格,就會原樣顯示。通過此方法即可以判斷製表符和空格了。

Shell字串擷取

一 linux shell 擷取字元變數的前8位,有方法如下 substr var 開始擷取位 擷取長度 1.expr substr a 1 8 2.echo a awk 3.echo a cut c1 8 4.echo 5.expr a 6.echo a dd bs 1 count 8 2 dev...

shell字串擷取

filed under shell shell字串的擷取的問題 一 linux shell 擷取字元變數的前8位,有方法如下 1.expr substr a 1 8 2.echo a awk 3.echo a cut c1 8 4.echo 5.expr a 6.echo a dd bs 1 cou...

shell字串擷取

假設有變數 var echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 即刪除 http 結果是 www.aaa.com 123.htmecho 表示從左邊開始刪除最後 最右邊 乙個 號及左邊的所有字元 即刪除 結果是 123.htmecho 表示從右邊開始,...