shell下字串的相關操作

2021-06-03 10:31:51 字數 2823 閱讀 3436

計算字串長度:

[shentao@vps ~]$ string=abcabc123abcabc

[shentao@vps ~]$ echo $

15[shentao@vps ~]$ echo `expr length $string`

15[shentao@vps ~]$ echo `expr "$string" : '.*'`

15

感覺最後一種是很奇怪的寫法。

匹配字串開頭的長度:

[shentao@vps ~]$ echo `expr match "$string" 'abc'`

3[shentao@vps ~]$ echo `expr match "$string" 'bc'` #字串不以bc開頭

0[shentao@vps ~]$ echo `expr match "$string" 'abc[a-z]*.2'`

8[shentao@vps ~]$ echo `expr match "$string" 'abc[a-z]*2'`

0

索引:

$ echo `expr index "$string" c`

6$ echo `expr index "$string" '5'`

0$ echo `expr index "$string" '51'`

7$ echo `expr index "$string" '5a1'`

1

後兩個語句的結果值得注意。

提取子串:

$ echo $

abcabc123abcabc

$ echo $

c123abcabc

$ echo $

c1$ echo $ # 這樣寫不能按期望輸出

abcabc123abcabc

$ echo $ #要在負數前加個空格

bcabc

$ echo $ #或者把負數括起來

bcabc

$ echo $

bc$ echo $

bc

第二種提取子串的方法:

$ echo `expr substr $string 4 3`

abc

從字串開頭位置提取子串:

$  echo `expr match "$string" '\(.[b-c]*[a-z]..[0-9]\)'`

abcabc1

$ echo `expr "$string" : '\(.[b-c]*[a-z]..[0-9]\)'`

abcabc1

$ echo `expr "$string" : '\([b-c]*[a-z]..[0-9]\)'` #$string不以[b-c]*開頭,所以不匹配

從字串結尾位置開始提取子串:

$ echo `expr match "$string" '.*\([a-c][a-c][a-c][a-c]*\)'`

abcabc

$ echo `expr "$string" : '.*\(......\)'`

abcabc

$ echo `expr match "$string" '.*\([a-c][a-c][a-c][a-c]\)'` # 從尾部開始提取,但並不是一定要提取最尾部的字元,下面兩個例子說明這個

abca

$ echo `expr match "$string" '.*\([a-c][a-c][a-c]\)'`

abc$ echo `expr match "$string" '.*\([1-3][a-c][a-c][a-c]\)'`

3abc

從字串開頭位置擷取子串(把匹配的子串刪除):

$ echo $  #最短匹配

123abcabc

$ echo $ # 字串不是以b開頭,所以不匹配

abcabc123abcabc

$ echo $ #最長匹配

abc$ echo $ # 字串不是以b開頭,所以不匹配

abcabc123abcabc

從字串尾部擷取子串:

$ echo $

abcabc123abca

$ echo $

a$ echo $ #字串不以c結尾,所以不匹配

abcabc123abcabc

$ echo $ #同上

abcabc123abcabc

替換字串中的子串:

$ echo $  # 替換第乙個找到的字串

mmmabc123abcabc

$ echo $ # 替換所有找到的字串

mmmabc123abcmmm

$ echo $ #沒有ac,所以不替換

abcabc123abcabc

指定替換開頭或者結尾處的子串:

$ echo $   #如果匹配字串開頭處的子串,就替換

mmmabc123abcabc

$ echo $ #如果匹配字串結尾處的子串,就替換

abcabc123abcmmm

$ echo $ #字串不以bc開頭,所以不替換

abcabc123abcabc

$ echo $ #字串不以ab結尾,所以不替換

abcabc123abcabc

shell字串操作

1,字串剪裁 file dir1 dir2 dir3 my.file.txt 我們可以用 分別替換獲得不同的值 拿掉第一條 及其左邊的字串 dir1 dir2 dir3 my.file.txt 拿掉最後一條 及其左邊的字串 my.file.txt 拿掉第乙個 及其左邊的字串 file.txt 拿掉最...

shell 字串操作

字串長度 expr length string expr string 從字串開始的位置匹配子串的長度 expr match string substring substring 是乙個正規表示式 expr string substring substring 是乙個正規表示式 索引expr ind...

shell字串操作

linux shell 字串操作 長度,查詢,替換 詳解 在做shell批處理程式時候,經常會涉及到字串相關操作。有很多命令語句,如 awk,sed都可以做字串各種操作。其實shell內建一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程式等時間,因此速度會非常的快。一 判斷...