Linux使用Shell检测指定字符串

79ab1bb96eb8b3ae441ad1f2ff59a5ef.png

在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'"。

6e8f1e4dc5d1833fc46203db16e324dd.png

实际上,在 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

4f3974c3c203a96a5c95d8e870dd50d8.jpeg

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

✨✨ 感谢阅读,欢迎关注 ✨✨

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值