我需要验证$ 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
利迪娅
答案 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]}