【问题标题】:Search variable for multiple substrings搜索多个子字符串的变量
【发布时间】:2018-07-20 18:57:42
【问题描述】:

在 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 和其他方法,但它们没有正确地将字符串过滤到正确的文件中。任何帮助表示赞赏。

【问题讨论】:

    标签: sh bsd


    【解决方案1】:

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

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

    【讨论】:

    • 这会将所有字符串发送到 invalid.txt。我的模式如下: pattern1=".exe" pattern2="\temp\" pattern3="\users" 这会有所不同吗?
    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2020-11-07
    • 2020-06-25
    相关资源
    最近更新 更多