Shellで文字列が関係を含むと判断する方法をまとめます。

1804 ワード

前言
現在はウェブサイトのログを分析するたびに、Baiduの蜘蛛が本物の蜘蛛であるかどうかを判断しなければなりません。nslookupの後、判断結果には「baidu」文字列が含まれていますか?
以下に、shellに含まれる文字列を判断する方法を示します。ソースプログラマは、Stocoverflowおよびsegment faultを質問します。
方法1:grepで検索する

strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
  echo "  "
else
  echo "   "
fi
長い文字列を印刷して、検索する文字列を長い文字列でgrep検索し、結果を変数resultで記録します。
結果が空でないなら、straはstrを含むと説明します。結果が空なら、説明は含まれません。
この方法はgrepの特性を十分に利用し,最も簡潔である。
方法2:文字列演算子を利用する

strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
  echo "  "
else
  echo "   "
fi
文字列演算子=~を使って、straがstrを含むかどうかを直接判断します。最初の方法よりも簡潔ではないですか?)
方法3:ワイルドカードを利用する

A="helloworld"
B="low"
if [[ $A == *$B* ]]
then
  echo "  "
else
  echo "   "
fi
これもとてもeasyで、ワイルドカード*号でstraの中の非straBの部分を代行して、もし結果が等しく説明して含めるならば、逆に含まれません。
方法四:case in文を利用する

thisString="1 2 3 4 5" #     
searchString="1 2" #      
case $thisString in 
  *"$searchString"*) echo Enemy Spot ;;
  *) echo nope ;;
esa
これは複雑です。case inはまだ触れていませんが、簡単な方法があるなら、なぜこうする必要がありますか?
方法5:置換を利用する

STRING_A=$1
STRING_B=$2
if [[ ${STRING_A/${STRING_B}//} == $STRING_A ]]
  then
    ## is not substring.
    echo N
    return 0
  else
    ## is substring.
    echo Y
    return 1
  fi
これも複雑です
締め括りをつける
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に一定の助けをもたらしてほしいです。もし疑問があれば、メッセージを残して交流してもいいです。