如何在ksh中对变量进行精确的单词匹配?

时间:2010-08-25 11:21:13

标签: perl ksh

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

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

此语法的问题在于它还匹配ValidValidationVALID等字词,我的目标是与变量{{1}中的单词Validation完全匹配}。

我问我是否也可以在我的脚本中使用Perl语法来完全匹配单词$LINE_FROM_FILE,例如:

Validation

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

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

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