首页 > 解决方案 > 搜索多个子字符串的变量

问题描述

在 BSD 系统上工作并且很难搜索变量以查看它是否包含多个不同子字符串中的任何一个。这就是我所拥有的:

> echo $lenck   if test "${lenck#*$pattern1}" != "$lenck";              
> then
>      if test "${lenck#*$pattern2}" != "$lenck";                                            
>      then
>      echo "Invalid or corrupted IP or process"
>      echo $lenck | tee -a invalid.txt
>      else
>          pat2out=$lenck
>          if test "${pat2out#*$pattern3}" != "$pat2out";
>          then
>          echo "Invalid or corrupted IP or process"
>          echo $pat2out | tee -a invalid.txt
>          else
>            pat3out=$pat2out
>            if test "${pat3out#*$pattern4}" != "$pat3out";
>            then
>            echo "Invalid or corrupted IP or process"
>            echo $pat3out | tee -a invalid.txt
>            else
>            echo $pat3out | tee -a processed.txt
>            fi
>          fi
>       fi
> 
>   else
>      echo "Invalid or corrupted IP or process"
>      echo $lenck | tee -a invalid.txt   fi

问题是我需要能够搜索超过四种模式。尝试了 grep -e 和其他方法,但它们没有正确地将字符串过滤到正确的文件中。任何帮助表示赞赏。

标签: shbsd

解决方案


看起来您的所有测试实际上都针对相同的输入字符串进行测试,因此您可以使用case 语句

echo "$lenck"
case "$lenck" in
  *$pattern1*|*$pattern2*|*$pattern3*)
    echo "Invalid or corrupted IP or process"
    echo "$lenck" >> invalid.txt
    ;;
  *)
    echo "$lenck" >> processed.txt
    ;;
esac

推荐阅读