摘要
在Linux中写Shell脚本,经常会遇到需要在字符串中查找和判断指定的子字符串是否存在,通配符,正则表达式,grep命令等都是常用的方法,以下整理几种shell脚本查找字符串的方法示例。
利用grep命令
示例代码如下:
strA="long string"
strB="string"
result=$(echo $strA | grep "${strB}")
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi
先打印长字符串,然后在长字符串中通过grep命令查找要搜索的字符串,用变量result记录搜索的结果,如果结果不为空,说明strA包含strB。如果结果为空,说明不包含。
这个方法充分利用了grep 的特性,最为简洁。
利用shell的字符串运算符
#!/bin/bash
strA="helloworld"
strB="low"
if [[ $strA =~ $strB ]]
then
echo "包含"
else
echo "不包含"
fi
利用通配符
用星号通配符(星号)*包围子字符串并将其与字符串进行比较是最简单的方法。
通配符表示零个,一个或多个字符的符号。
如果子字符串包含在字符串中返回true。
在下面的示例中,我们使用if语句和相等运算符(==)来检查字符串 STR 中是否找到子字符串 SUB:
#!/bin/bash
A="helloworld"
B="low"
if [[ $A == *$B* ]]
then
echo "exist"
else
echo "not exist"
fi
执行结果输出:
exist
利用case in 语句
您也可以使用case语句来检查字符串是否包含另一个字符串,而不是使用if语句。
#!/bin/bash
thisString="1 2 3 4 5" # 源字符串
searchString="1 2" # 搜索字符串
case $thisString in
*"$searchString"*) echo "exist" ;;
*) echo "not exist" ;;
esac
执行结果输出:
exist
利用Shell的替换语法
利用shell语法的替换功能搜索:
#!/bin/bash
STRING_A="hello word"
STRING_B="llo"
if [[ ${STRING_A/${STRING_B}//} == $STRING_A ]]
then
echo N
else
echo Y
fi
使用正则表达式运算符
可以使用正则表达式运算符=~确定指定子字符串是否出现在字符串中。 使用此运算符时,右字符串被视为正则表达式。
周期后跟星号*匹配除了换行符之外的任何字符零次或多次出现。
#!/bin/bash
STR='hello cfnotes 2022.'
SUB='cfnotes'
if [[ "$STR" =~ .*"$SUB".* ]]; then
echo "I'm there."
fi
脚本将输出如下内容:
I'm there.
其他方法
以下再列举shell中查找字符串的其他几个方法。
#! /bin/bash
var1="hello"
var2="he"
#方法1
if [ ${var1:0:2} = $var2 ]
then
echo "1:include"
fi
#方法2
echo "$var1" |grep -q "$var2"
if [ $? -eq 0 ]
then
echo "2:include"
fi
#方法3
echo "$var1" |grep -q "$var2" && echo "include" || echo "not"
#方法4
[[ "${var1/$var2/}" != "$var2" ]] && echo "include" || echo "not"
评论区