在shell脚本中匹配单词与字母

时间:2010-08-26 11:04:09

标签: bash awk

我需要验证$ line_from_file中的第二个单词是否是包含小写或大写字符的字符串

(WORD - 字符串可以带数字)

如何匹配WORD字符串? (我在ksh脚本中使用这种语法)

    [[  ` echo $line_from_file | awk '{print $2}' ` =   WORD    ]] && print "MATCH"

WORD - 可以是小数字或大写字母(但不仅仅是数字)

例如

WORD = textBIG

WORD = HOME_DIR

WORD =电脑1

WORD = HOST_machine

利迪娅

3 个答案:

答案 0 :(得分:0)

您可以使用awk函数toupper(或tolower)来检查此内容。

WORD == toupper(WORD)表示单词为大写

答案 1 :(得分:0)

$ shopt -s extglob
$ s="abCD123"
$ case "$s" in +([0-9]) ) echo "not match" ;;+([-a-zA-Z0-9_]) ) echo "match";; esac
match
$ s="12345"
$ case "$s" in +([0-9]) ) echo "not match" ;;+([-a-zA-Z0-9_]) ) echo "match";; esac
not match
$ s="a12345-asf"
$ case "$s" in +([0-9]) ) echo "not match" ;;+([-a-zA-Z0-9_]) ) echo "match";; esac
match

答案 2 :(得分:0)

如果要验证字符串不仅包含数字:

string=$(echo "$line_from_file" | awk '{print $2}')
not_digits_only='[^[:digit:]]+'
allowed_chars='[[:alnum:]_]'
[[ $string =~ $not-digits-only && $string =~ $allowed-chars ]] && echo "Valid"

如果你想查看字符串是否匹配而不考虑大写或小写(不区分大小写的匹配):

string=$(echo "$line_from_file" | awk '{print tolower($2)}')
word_lc=$(echo $word | awk '{print tolower($0)}')
[[ $string == $word_lc ]] && echo "Match"

如果你有Bash 4:

string=$(echo "$line_from_file" | awk '{print $2}')
[[ ${string,,} == ${word,,} ]] && echo "Match"

在Bash中,您可以通过几种方式从一行中获取第二个单词,而无需调用awk。其中之一是:

string=($line_from_file)
string=${string[1]}