2010-08-26 9 views
1

que je dois vérifier si le second mot de line_from_file de $ est une chaîne avec des minuscules ou des majusculesmot de correspondance avec des lettres en script shell

(WORD - chaîne peut être avec des chiffres)

Comment faire correspondre WORD chaîne? (J'utilise cette syntaxe dans le script ksh)

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

MOT - peuvent être des caractères minuscules ou majuscules avec des chiffres (mais non seulement des chiffres)

par exemple

MOT = textBIG

MOT = RÉP_PERSO

MOT = ORDINATEUR1

MOT = HOST_machine

Lidia

Répondre

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 
0

Vous pouvez utiliser les fonctions awk toupper (ou tolower) pour vérifier cela.

WORD == toupper(WORD) signifie mot est en majuscules

0

Si vous voulez vérifier que la chaîne ne se compose pas uniquement de chiffres:

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

Si vous voulez voir si la chaîne correspond sans tenir compte majuscules ou minuscules (correspondance insensible à la casse):

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

Si vous ont Bash 4:

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

Dans Bash, vous pouvez obtenir le deuxième mot d'une ligne dans deux façons sans appeler awk. L'un d'entre eux est:

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