1. 程式人生 > >【shell】兩種字串提取場景的實現

【shell】兩種字串提取場景的實現

 

shell雖然比batch順眼點兒,但還是老話,入門容易,精通難。

1、場景一是這樣的,現有字串的內容 name: tiger; age:18; location:china;

需求:提取每個屬性的值,如age的值為18。

定義了一個函式如下:

1 function getValueOf(){
2     val=$(cat $1 | grep -oP "(?<=$2)[^;]+" | sed "s/,//g" | sed 's/ //g'| tr -cd "[0-9]")
3     echo $val
4 }

做法就是提取age:和;之間的文字,這裡結合grep、sed和正則。傳如兩個引數即可,第一個引數是整個字串,第二個是name:。

2、場景二是這樣的,提取位於兩個特定字串str1和str2之間的內容,如Fuck Jose Mourinho !

提取Jose,需要傳參:第一個引數是整個字串,第二個可以是Fuck ,第三個可以是  Mourinho,注意兩個單詞前後的空格。

1 function getTextBtw(){    
2     patternStr="s/.*$2\(.*\)$3.*/\1/"
3     text=$(cat $1 | sed "$patternStr")    
4     echo $text    
5 }