在Linux中,我们可以使用Shell脚本来检测指定字符串是否存在。先看一种比较简单的方法:使用grep命令,它用于在文件中搜索匹配的文本模式。假设有一个文件file.txt,我们想检查是否包含特定的"example"。
grep "example" file.txt
如果文件包含"example"字符串,这个命令会输出包含该字符串的行。如果没有找到匹配项,则不会有任何输出。
如果想检查一个字符串变量是否包含指定的字符串,可以这样做:
string="Hello, world!"
if [[ "$string" == *"example"* ]]; then
echo "String contains 'example'"
else
echo "String does not contain 'example'"
fi
在这个例子中,我们使用==运算符比较字符串变量string是否包含"example"。如果包含,就输出"String contains 'example'",否则输出"String does not contain 'example'"。
实际上,在 Bash 脚本中,有不止一种检查子字符串的方法。我们整理了几个,供大家参考使用。
1、通过grep来判断:
str1="abcdefgh"
str2="def"
result=$(echo $str1 | grep "${str2}")
if [[ "$result" != "" ]]
then
echo "包含"
else
echo "不包含"
fi
先打印长字符串,然后在长字符串中 grep 查找要搜索的字符串,用变量result记录结果,如果结果不为空,说明str1包含str2。如果结果为空,说明不包含。这个方法充分利用了grep 的特性,最为简洁。
2、字符串运算符
str1="abcdefgh"
str2="def"
if [[ $str1 =~ $str2 ]]
then
echo "包含"
else
echo "不包含"
fi
利用字符串运算符 =~ 直接判断str1是否包含str2。
3、利用通配符
str1="abcdefgh"
str2="def"
if [[ $str1 == *$str2* ]]
then
echo "包含"
else
echo "不包含"
fi
用通配符*号代理str1中非str2的部分,如果结果相等说明包含,反之不包含。
4、利用case in 语句
str1="abcdefgh"
str2="def"
case $str1 in
*"$str2"*) echo Enemy Spot ;;
*) echo nope ;;
esac
5、利用替换
str1="abcdefgh"
str2="def"
if [[ ${str1/${str2}//} == $str1 ]]
then
echo "不包含"
else
echo "包含"
fi
Shell判断文件是否包含给定字符串
给定一个字符,比方说“Hello Weijishu”,查找相应文件中是否包含该字符。注意下文中的用的是[[]]还是[]
方式1:grep
# grep -c 返回 file中,与str匹配的行数
grep -c str file
FIND_FILE="/home/linduo/test/Test.txt"
FIND_STR="Hello Weijishu"
# 判断匹配函数,匹配函数不为0,则包含给定字符
if [ `grep -c "$FIND_STR" $FIND_FILE` -ne '0' ];then
echo "The File Has Hello Weijishu!"
exit 0
fi
方式2:cat、while、read组合使用。使用这种方式,要注意时while read 在子shell中运行。
FIND_FILE="/home/weijishu/test/Test.txt"
FIND_STR="Hello Weijishu"
cat $FIND_FILE| while read line
do
if [[ $line =~ $FIND_STR ]];then
echo "The File Has Hello Weijishu!"
fi
done
✨✨ 感谢阅读,欢迎关注 ✨✨