1. 程式人生 > >Shell判斷字串是否包含小結

Shell判斷字串是否包含小結

前言

現在每次分析網站日誌的時候都需要判斷百度蜘蛛是不是真實的蜘蛛,nslookup之後需要判斷結果中是否包含“baidu”字串

以下給出一些shell中判斷字串包含的方法,來源程式設計師問答網站 stackoverflow 以及segmentfault。

方法一:利用grep查詢

?
123456789strA="long string"strB="string"result=$(echo $strA | grep "${strB}")if [[ "$result" != "" ]]thenecho "包含"elseecho "不包含"fi

先列印長字串,然後在長字串中 grep 查詢要搜尋的字串,用變數result記錄結果

如果結果不為空,說明strA包含strB。如果結果為空,說明不包含。

這個方法充分利用了grep 的特性,最為簡潔。

方法二:利用字串運算子

?
12345678strA="helloworld"strB="low"if [[ $strA =~ $strB ]]thenecho "包含"elseecho "不包含"fi

利用字串運算子 =~ 直接判斷strA是否包含strB。(這不是比第一個方法還要簡潔嗎!)

方法三:利用萬用字元

?
12345678A="helloworld"B="low"if [[ $A == *$B* ]]thenecho "包含"elseecho "不包含"fi

這個也很easy,用萬用字元*號代理strA中非strB的部分,如果結果相等說明包含,反之不包含。

方法四:利用case in 語句

?
123456thisString="1 2 3 4 5" # 源字串searchString="1 2" # 搜尋字串case $thisString in*"$searchString"*) echo Enemy Spot ;;*) echo nope ;;esa

這個就比較複雜了,case in 我還沒有接觸到,不過既然有比較簡單的方法何必如此

方法五:利用替換

?
123456789101112STRING_A=$1STRING_B=$2if [[ ${STRING_A/${STRING_B}//} == $STRING_A ]]then## is not substring.
echo Nreturn 0else## is substring.echo Yreturn 1fi

這個也挺複雜