shell 字符串處理匯總(查找,替換等等)


字符串:

  • 簡稱“串”。有限字符的序列。數據元素為字符的線性表,是一種數據的邏輯結構。在計算機中可有不同的存儲結構。在串上可進行求子串、插入字符、刪除字符、置換字符等運算。

字符:

  • 計算機程序設計及操作時使用的符號。包括字母、數字、空格符、提示符及各種專用字符等。

一般字符的運算包括:

 

  • 第一、找出字符或者字符串的類型,是數字、字母還是其他特定字符,是可打印字符,還是不可打印字符(一些控制字符)。
  • 第二、找出組成字符串的字符個數和字符串的存儲結構(比如數組)。
  • 第三、對串的常規操作:求子串、插入字符、刪除字符、置換字符、字符串的比較等。
  • 第四、對串的一些比較復雜而有趣的操作,這里將在最后介紹一些有趣的范例。

1. 字符串的屬性

字符有可能是數字、字母、空格、其他特殊字符,而字符串有可能是它們任何一種或者多種的組合,在組合之后還可能形成一個具有特定意義的字符串,諸如郵件地址,URL地址等。
概要示例: 下面我們來看看如何判斷字符的類型。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//  數字或者數字組合(能夠返回結果,即程序退出狀態是0,說明屬於這種類型,反之不然)
$ i=5;j=9423483247234;
$ echo  $i | grep  [0-9]*
5
$ echo  $j | grep  [0-9]*
9423483247234
$ echo  $j | grep  [0-9]* > /dev/null
$ echo  $?
0
//  字符組合(小寫字母、大寫字母、兩者的組合)
$ c= "A" ; d= "fwefewjuew" ; e= "fewfEFWefwefe"
$ echo  $c | grep  [A-Z]
A
$ echo  $d | grep  "[a-z]*"
fwefewjuew
$ echo  $e | grep  "[a-zA-Z]*"
fewfEFWefwefe
//  字母和數字的組合
$ ic= "432fwfwefeFWEwefwef"
$ echo  $ic | grep  "[0-9a-zA-Z]*"
432fwfwefeFWEwefwef
//  空格或者Tab鍵等
$ echo  " "  | grep  " "
  
$ echo  -e "\t"  | grep  "[[:space:]]"  #[[:space:]]會同時匹配空格和TAB鍵
 
$ echo  -e " \t"  | grep  "[[:space:]]"
 
$ echo  -e "\t"  | grep  "<tab>"  #<tab>為在鍵盤上按下TAB鍵,而不是字符<tab>
//  匹配郵件地址
$ echo  "test2007@lzu.cn"  | grep  "[0-9a-zA-Z\.]*@[0-9a-zA-Z\.]"
test2007@lzu.cn
//  匹配URL地址(以http鏈接為例)
$ echo  "http://news.lzu.edu.cn/article.jsp?newsid=10135"  | grep  "http://[0-9a-zA-Z\./=?]*"
http: //news .lzu.edu.cn /article .jsp?newsid=10135

說明:
[1] /dev/null和/dev/zero是非常有趣的兩個設備,它們都猶如一個黑洞,什么東西掉進去都會消失殆盡;后者則是一個能源箱,你總能從那里取到0,直到你退出。
[2] [[:space:]]是grep用於匹配空格或者TAB鍵類型字符串的一種標記,其他類似的標記請查看grep的幫助,man grep。
[3] 上面都是用grep來進行模式匹配,實際上sed, awk都可以用來做模式匹配,關於匹配中用到的正則匹配模式知識,大家可以參考正則匹配模式,更多相關資料請看參考資料。
[4] 如果僅僅想判斷字符串是否為空,即判斷字符串的長度是否為零,那么可以簡單的通過test命令的-z選項來判斷,具體用法見test命令,man test.

2.索引

expr index $string $substring

在字符串$string中所匹配到的$substring第一次所出現的位置.

1
2
3
4
5
6
stringZ=abcABC123ABCabc
echo  ` expr  index "$stringZ"  C12`             # 6
                                             # C 字符的位置.
 
echo  ` expr  index "$stringZ"  1c`              # 3
  # 'c' (in #3 position) matches before '1'.

 

expr實例

1、計算字串長度

> expr length this is a test 14

2、抓取字串

> expr substr this is a test 3 5 is is

3、抓取第一個字符數字串出現的位置

> expr index "sarasara" a 2

4、整數運算

 > expr 14 % 9 5 > expr 10 + 10 20 > expr 1000 + 900 1900 > expr 30 / 3 / 2 5 > expr 30 \* 3 (使用乘號時,必須用反斜線屏蔽其特定含義。因為shell可能會誤解顯示星號的意義) 90 > expr 30 * 3 expr: Syntax error

參考:https://www.cnblogs.com/jxterminator/p/4112565.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM