判断shell中字符串中是否有特定字符,行首行尾中间等特殊情况

在linux系统shell脚本中,有时候会用到判断字符串中是否有某些关键字段
有两种方法,第一种就是直接把这段字符串拆了,把想要的字符串提取出来,当然如果你需要写关键字段,那只能使用这种方法,但是如果我们只需要判断有没有,那可以使用第二种方法”grep” 方法。
如下代码想要搜索一串字符character中是否存在123这些字符,然后直接echo指令,利用管道符号,直接搜索123看有没有结果,-n string 如果 string 长度非零,则为真。

strA="123456"
strB="123"
result=$(echo $strA | grep "${strB}") 
if [ -n "$result" ]; then
    echo "yes"
else
    echo "no"
fi

但是如果我们想查找这段字符串的开头是不是以123开始的(比如搜索电话号码以180开头的电话),再使用这种方法,会有问题。因为在字符串中也会有字符串123。如上脚本假设strA=”xxx123”也会被匹配到,所以这里可以使用 “^”符号,这个符号定义从数据流中文本行首开始的模式,如果模式出现在行首之外的位置,则正则表达式无法匹配。代码如下

strA="xxx123"
result=$(echo $strA | grep "^123") 
if [ -n "$result" ]; then
    echo "yes"
else
    echo "no"
fi

同样如果需要锁定字符串在行尾,可以使用“$”符号。将这个特殊字符放在文本模式之后来指明数据航必须以该文本模式结尾代码如下

strA="123xxx"
result=$(echo $strA | grep "123$") 
if [ -n "$result" ]; then
    echo "yes"
else
    echo "no"
fi

同样搜索特定字符在字符串中的不同位置,如在某个字符前后可以使用“ . ” 符号,代表一个字符,“*”同理,代表在文本中出现0次或者N次,“?”代表前面字符可以出现0次或者1次,不会匹配更多字符,当然还有更多的正则表达式的使用方式,如需要排除某些字符等,这里想强调写代码还是要严谨一点,脚本使用比较方便快捷,但是容易出现隐患,比如查找一个进程是否存在,最快的方式就是
result=ps | grep "xxxx",然后判断。或者count=ps | grep "xxxx 这种,但是我们搜索这段字符串的时候,有可能出现一种情况就是这段字符串会以别的形式存在与别的进程中,比如说以参数的形式,很多指令都有“–xxxx”这种,很容易造成错误,所以还是谨慎点把。

猜你喜欢

转载自blog.csdn.net/wq3028/article/details/79494125