用Shell判断字符串包含关系的方法小结
前言
现在每次分析网站日志的时候都需要判断百度蜘蛛是不是真实的蜘蛛,nslookup之后需要判断结果中是否包含“baidu”字符串
以下给出一些shell中判断字符串包含的方法,来源程序员问答网站 stackoverflow 以及segmentfault。
方法一:利用grep查找
strA="long string" strB="string" result=$(echo $strA | grep "${strB}") if [[ "$result" != "" ]] then echo "包含" else echo "不包含" 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
这个也挺复杂
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
shell两个文件去重的多种姿势
前言大家都知道shell在文本处理上确有极大优势,比如多文本合并、去重等,但是最近遇到了一个难搞的问题,即两个大数据量文件去重。下面来看看详
Shell交互批量更改主机名的方法
需求分析:1、ssh公钥拷贝,提供无密码管理。2、批量同步hosts文件到多台主机。3、批量修改主机名。实现:首先编辑一份用于同步到多台主机的hosts文
shell(bash)下“time” 命令的输出详解
前言相信大家都知道bash下time是一个很有用的命令,它可以为一段脚本或一个程序的执行计时,这通常在粗略比较程序执行效率的时候很方便。但是你会