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

Bash 在shell脚本中将单词与字母匹配,bash,awk,Bash,Awk,我需要验证\u文件中$line\u的第二个单词是否是包含小写或大写字符的字符串 (字串可以是数字) 如何匹配字串?(我在ksh脚本中使用此语法) WORD-可以是带数字的小字符或大写字符(但不仅仅是数字) 比如说 WORD=textBIG WORD=HOME\u DIR WORD=计算机1 WORD=主机 Lidia您可以使用awk函数toupper(或tolower)来检查这一点 WORD==toupper(WORD)表示WORD是大写的如果要验证字符串是否仅由数字组成: $ shopt -s

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

(字串可以是数字)

如何匹配字串?(我在ksh脚本中使用此语法)

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

比如说

WORD=textBIG

WORD=HOME\u DIR

WORD=计算机1

WORD=主机


Lidia

您可以使用awk函数
toupper
(或
tolower
)来检查这一点


WORD==toupper(WORD)
表示WORD是大写的

如果要验证字符串是否仅由数字组成:

$ 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
string=$(echo "$line_from_file" | awk '{print $2}')
not_digits_only='[^[:digit:]]+'
allowed_chars='[[:alnum:]_]'
[[ $string =~ $not-digits-only && $string =~ $allowed-chars ]] && echo "Valid"
如果要查看字符串是否匹配,而不考虑大小写(不区分大小写匹配):

如果您有Bash 4:

string=$(echo "$line_from_file" | awk '{print $2}')
[[ ${string,,} == ${word,,} ]] && echo "Match"
在Bash中,您可以通过几种方式从一行中获取第二个单词,而无需调用
awk
。其中之一是:

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