【问题标题】:How do I do an exact word match on a variable in ksh?如何对 ksh 中的变量进行精确的单词匹配?
【发布时间】:2010-08-25 11:21:13
【问题描述】:

我使用以下语法作为 ksh 脚本的一部分来验证单词 Validation 是否存在于 LINE_FROM_FILE 中。

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

这种语法的问题是它也匹配ValidValidationVALID等单词,我的目标是完全匹配变量$LINE_FROM_FILE中的单词Validation

我问是否也可以在我的脚本中使用 Perl 语法来精确匹配单词Validation,例如:

[[ ` some perl command ` = Validation  ]] && print "match Validation"

【问题讨论】:

    标签: perl ksh


    【解决方案1】:

    测试该行是否包含单词分隔字符之间的单词。一个有用的技巧是在字符串的开头和结尾添加一个单词分隔字符,以防单词位于字符串的开头或结尾。

    [[ " $LINE_FROM_FILE " == *[![:alnum:]]Validation[![:alnum:]]* ]]
    

    这假定单词仅由字母和数字组成。如果您有不同的定义,请调整模式。

    请注意,您编写的测试 [[ "${LINE_FROM_FILE##*Validation}" != "${LINE_FROM_FILE}" ]] 是编写 [[ $LINE_FROM_FILE = *Validation* ]] 的复杂方式(即,检查 Validation 作为子字符串)。

    【讨论】:

      【解决方案2】:

      如果您使用 bash,那么您很幸运:

      bash regexs

      例子:

      input=$1
      
      
      if [[ "$input" =~ "[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]" ]]
      #                 ^ NOTE: Quoting not necessary, as of version 3.2 of Bash.
      # NNN-NN-NNNN (where each N is a digit).
      then
        echo "Social Security number."
        # Process SSN.
      else
        echo "Not a Social Security number!"
        # Or, ask for corrected input.
      fi
      

      【讨论】:

      • 你有相关的例子来匹配验证词
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 2014-07-21
      • 1970-01-01
      • 2015-02-18
      • 1970-01-01
      • 2023-03-30
      • 2013-11-12
      相关资源
      最近更新 更多