如何在shell中判断A字符串中是不是包含B字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在shell中判断A字符串中是不是包含B字符串相关的知识,希望对你有一定的参考价值。

参考技术A stra="this is a string"
strb="a string"
pos=$(printf "$stra" | awk -v strb="$strb" ' print index($0, strb) ')
if [ $pos -ne 0 ]; then
    printf "stra contains strb\\n"
else
    printf "stra does not contain strb\\n"
fi

本回答被提问者采纳
参考技术B echo $A | grep $B

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上看其实还有更多形式,不过基本都属于以上几类了。

 

以上是关于如何在shell中判断A字符串中是不是包含B字符串的主要内容,如果未能解决你的问题,请参考以下文章

shell中如何比较两字符串是不是相等

shell 如何判断是不是为一串连续字符

shell 判断字符串是不是存在包含关系

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

sql中 如何判断一个字符串是不是包含另外一个字符串

如何判断一个字符串中是不是有逗号