【问题标题】:shell script + match word in line without using echoshell脚本+在行中匹配单词而不使用echo
【发布时间】:2010-08-25 09:02:53
【问题描述】:

以下测试语法是 ksh 脚本的一部分

   [[ $PARAM = TRUE ]] &&  [[ ` echo $LINE_FROM_FILE | grep -c Validation ` -eq 1 ]] && print "find Validation word"

我能否在不使用 echo 命令的情况下获得一些其他创造性的语法/解决方案/命令来验证 LINE_FROM_FILE 中是否存在验证字?

LINE_FROM_FILE="123 验证 V125 tcp IP=1.2.56.4"

备注:需要准确匹配Validation word

莉迪亚

【问题讨论】:

    标签: ksh


    【解决方案1】:

    您可以使用Parameter expansion 删除直到并包括Validation 的所有内容,并将其与参数的正常扩展进行比较。如果它们不相等,则参数包含 Validation

    [[ "${LINE_FROM_FILE##* Validation }" != "${LINE_FROM_FILE}" ]]
    

    (由于 Validation 之前和之后总是有空格,这些可以包含在模式中。我不知道在 shell 模式中匹配单词开头和结尾的其他方法)

    【讨论】:

    • # LINE_FROM_FILE="1 2 3 ValidationWORD" # [[ "${LINE_FROM_FILE##*Validation}" != "${LINE_FROM_FILE}" ]] && print OK OK
    • 尝试使用 LINE_FROM_FILE="1 2 3 ValidationWORD" ,然后您会看到它也匹配 -:(
    • 您的grep 版本也将匹配该行。我所做的是复制那个版本所做的。
    • 是的,但我想完全匹配验证词,我同意 grep 不能很好地完成工作
    • Validation前面和Validation后面的空格是否一直存在?
    【解决方案2】:

    您可以使用case

    case $LINE_FROM_FILE in
        *Validation*)
            echo "found word Validation"
            ;;
        *)
            echo "did not find word Validation"
            ;;
    esac
    

    【讨论】:

      【解决方案3】:
      [[ $PARAM = TRUE ]] &&  [[ "$LINE_FROM_FILE" == *Validation* ]] && print "find Validation word"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        相关资源
        最近更新 更多