• shell 字符串包含


    转自:Shell判断字符串包含关系的几种方法

    现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含“baidu”字符串

    以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stackoverflow 以及segmentfault

    方法一:利用grep查找

    复制代码
    1 strA="long string"
    2 strB="string"
    3 result=$(echo $strA | grep "${strB}")
    4 if [[ "$result" != "" ]]
    5 then
    6     echo "包含"
    7 else
    8     echo "不包含"
    9 fi
    复制代码

    先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果

    如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。

    这个方法充分利用了grep 的特性,最为简洁。

    方法二:利用字符串运算符

    复制代码
    strA="helloworld"
    strB="low"
    if [[ $strA =~ $strB ]]
    then
        echo "包含"
    else
        echo "不包含"
    fi
    复制代码

    利用字符串运算符 =~ 直接判断strA是否包含strB。(这不是比第一个方法还要简洁吗摔!)

    方法三:利用通配符

    复制代码
    A="helloworld"
    B="low"
    if [[ $A == *$B* ]]
    then
        echo "包含"
    else
        echo "不包含"
    fi
    复制代码

    这个也很easy,用通配符*号代理strA中非strB的部分,如果结果相等说明包含,反之不包含。

    方法四:利用case in 语句

    复制代码
    thisString="1 2 3 4 5" # 源字符串
    searchString="1 2" # 搜索字符串
    case $thisString in 
        *"$searchString"*) echo Enemy Spot ;;
        *) echo nope ;;
    esa
    复制代码

    这个就比较复杂了,case in 我还没有接触到,不过既然有比较简单的方法何必如此

    方法五:利用替换

    复制代码
    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
    复制代码

    这个也挺复杂

    如果到stackoverflow上看其实还有更多形式,不过基本都属于以上几类了。

  • 相关阅读:
    截图软件FastStone
    java中继承thread类的其他类的start()方法与run()方法
    .net连接MySql 出错
    题解【Codeforces1139C】Edgy Trees
    题解【Codeforces580C】Kefa and park
    题解【Codeforces1234D】Distinct Characters Queries
    题解【洛谷P4025】[PA2014]Bohater
    题解【洛谷P1445】[Violet]樱花
    题解【洛谷P2516】[HAOI2010]最长公共子序列
    题解【洛谷P3275】[SCOI2011]糖果
  • 原文地址:https://www.cnblogs.com/drizzlewithwind/p/6281749.html
Copyright © 2020-2023  润新知