【shell】兩種字串提取場景的實現
阿新 • • 發佈:2018-11-29
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 }