Linux shell 程式設計之 字串的擷取

2021-09-24 02:15:41 字數 2929 閱讀 6851

1)方法一,使用 ${}表示式

格式:$

定義乙個變數school,並確認其字串長度:

[root@svr5 ~]# school="tarena it group."

[root@svr5 ~]# echo $

16 //包括16個字元(含空格)

使用${}擷取時,起始位置可以省略,省略時從第乙個字元開始截。比如,以下操作都可以從左側開始擷取前6個字元:

[root@svr5 ~]# echo $

tarena

或者

[root@svr5 ~]# echo $

tarena

使用${}方式擷取字串時,起始位置是從0開始的(和陣列下標編號類似) 。

因此,如果從起始位置1開始擷取6個字元,那就變成這個樣子了:

[root@svr5 ~]# echo $

arena //最後的空格未顯示出來,實際為「arena 」

[root@svr5 ~]# md5sum /etc/fstab  				//直接檢視md5sum校驗值

eef0254e6049a411dc30db864c0ee6ea /etc/fstab

[root@svr5 ~]# md5str=$(md5sum /etc/fstab) //儲存到變數

[root@svr5 ~]# echo $ //擷取前32個字元(md5值的固定長度)

eef0254e6049a411dc30db864c0ee6ea

2)方法二,使用 expr substr

格式:expr substr 「$var」 起始位置 長度

還以前面的school變數為例,確認原始值:

[root@svr5 ~]# echo $school

tarena it group.

[root@svr5 ~]# echo $

16

使用expr substr擷取字串時,起始編號從1開始,這個要注意與${}相區分。

從左側擷取school變數的前6個字元:

[root@svr5 ~]# expr substr "$school" 1 6

tarena

這裡注意,因為school變數的值裡含有空格,所以應該加雙引號進行呼叫,否則是會報錯的:

[root@svr5 ~]# expr substr $school 1 6

expr: 語法錯誤

從左側擷取school變數的第11-16個字元:

[root@svr5 ~]# expr substr "$school" 11 16

group.

[root@svr5 ~]# md5sum /etc/fstab  				//確認md5sum校驗值

eef0254e6049a411dc30db864c0ee6ea /etc/fstab

[root@svr5 ~]# md5str=$(md5sum /etc/fstab) //儲存到變數

[root@svr5 ~]# expr substr "$md5str" 1 32 //擷取前32個字元

eef0254e6049a411dc30db864c0ee6ea

3)方式三,使用cut分割工具

格式:echo $var | cut -b 起始位置-結束位置

選項 -b 表示按位元組擷取字元,其中起始位置、結束位置都可以省略。當省略起始位置時,視為從第1個字元開始(編號也是從1開始,與expr類似),當省略結束位置時,視為擷取到最後。

還以前面的school變數為例,確認原始值:

[root@svr5 ~]# echo $school

tarena it group.

[root@svr5 ~]# echo $

16

從左側擷取前6個字元,可執行以下操作:

[root@svr5 ~]# echo $school | cut -b 1-6

tarena

或者

[root@svr5 ~]# echo $school | cut -b -6

tarena

擷取第11-16個字元:

[root@svr5 ~]# echo $school | cut -b 11-16

group.

從第8個字元擷取到末尾:

[root@svr5 ~]# echo $school | cut -b 8-

it group.

只擷取單個字元,比如第9個字元:

[root@svr5 ~]# echo $school | cut -b 9

t

如果起始位置、結束位置同時省略,那就和直接echo變數值沒啥區別了:

[root@svr5 ~]# echo $school | cut -b -

tarena it group.

[root@svr5 ~]# md5sum /etc/fstab  				//確認md5sum校驗值

eef0254e6049a411dc30db864c0ee6ea /etc/fstab

[root@svr5 ~]# md5sum /etc/fstab | cut -b -32 //擷取前32個字元

eef0254e6049a411dc30db864c0ee6ea

linux shell程式設計之 if語句

一 語句格式 一行中的寫法 if test commands then consequent commands fi 多行的寫法 if 條件 then command else command fi 基本語法記住亮點 1 按照漢語的方式記憶 如果 if 那麼 then 就 否則 else 就 2 記...

Linux shell 程式設計之提取字元與統計

1 假如,有一bb文件的格式如下 現在要求提取以上紅體字部分,我們可以通過以下命令實現 grep aa.png bb cut d f6 2 假如,有一bb文件的格式如下 現在,要獲取紅體字部分,可以用以下命令來實現 grep aa.png bb cut d f4 cut sd f3 3 以第2點為例...

Linux shell程式設計之awk sed用法詳解

awk的用法 1.awk的使用 呼叫方式 1.命令列方式 2.將所有awk命令插入乙個檔案,並使awk程式可執行,然後使awk命令直譯器作為指令碼的首行,以便通過鍵入指令碼名稱來呼叫它。3.將所有的awk命令插入乙個單獨檔案,然後呼叫。選項說明 f 域符號 預設為空格 f 指明awk指令碼 2.模式...