2010-08-25 29 views
2

我使用以下语法作为ksh脚本的一部分来验证是否存在于LINE_FROM_FILE中。如何在ksh中对变量进行精确匹配?

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

这种语法的问题是,它也是匹配的词像ValidValidationVALID等等,我的目标是要在变量$LINE_FROM_FILEValidation完全匹配。

我问,也可以使用Perl语法在我的脚本字Validation完全匹配,例如:

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

回答

0

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

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

这假设单词只包含字母和数字。如果您有不同的定义,请调整模式。

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

0

如果你使用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 
+0

您有示例 – lidia 2010-08-25 11:32:54

+0

包含示例...../ – ennuikiller 2010-08-25 12:15:24

+0

您是否有相关示例以匹配验证字 – lidia 2010-08-25 12:37:33