2009-11-07 7 views
1

Je suis en train de valider l'entrée à l'aide egrep et regex.Here est la ligne à partir du script (c-shell):Comment egrep script shell Unix variable

echo $1 | egrep '^[0-9]+$' 
if ($status == 0) then 
set numvar = $1 
else 
    echo "Invalid input" 
    exit 1 
endif 

Si l'écho de tube I à egrep il fonctionne, mais il imprime également la variable sur l'écran, et c'est quelque chose dont je n'ai pas besoin.

Répondre

4

Pour supprimer simplement la sortie, vous pouvez rediriger vers le périphérique null.

echo $1 | egrep '^[0-9]+$' >/dev/null 
if ($status == 0) then 
set numvar = $1 
else 
    echo "Invalid input" 
    exit 1 
endif 

Vous pouvez également envisager d'utiliser l'option -c pour obtenir le nombre de matches au lieu d'utiliser l'aide de l'état.

En outre, à moins que vous utilisez csh, l'état est stocké dans $? pas $status

+1

J'ai utilisé l'option -c comme vous l'avez suggéré, et j'ai également défini une nouvelle variable à utiliser dans l'instruction if. set temp = 'echo $ 1 | egrep -c '^ [0-9] + $' ' if ($ temp! = 0) puis – Mike55

+1

Dans csh, le statut de sortie est en effet stocké dans' $ status' –

+0

J'ai ajouté une clarification à propos de csh et ajouterai un balise csh aussi. –

0

vous pouvez utiliser awk

$ echo "1234" | awk '{print $1+0==$1?"ok":"not ok"}' 
ok 
$ echo "123d4" | awk '{print $1+0==$1?"ok":"not ok"}' 
not ok 
+0

Merci, mais je préférerais l'egrep, seulement parce que je ne sais pas awk. Je vais probablement le donner à l'avenir, mais pour l'instant je n'ai pas le temps de l'apprendre. – Mike55

3

grep a une option -q qui supprime la sortie

donc:

egrep -q '^[0-9]+$' 
+1

La page de manuel indique: «Les scripts shell portables doivent éviter à la fois -q et -s et rediriger les sorties standard et error vers/dev/null à la place (-s est spécifié par POSIX.)" –

+0

@Dennis - Vous avez raison la question de la portabilité. En fait, les options -s et -q sont spécifiées par POSIX. L'option -q agit de la façon dont je l'utilise ici, l'option -s supprime les messages d'erreur. Voir http://www.gnu.org/software/grep/manual/html_node/General-Output-Control.html#General-Output-Control –

+1

Les scripts shell portables ne seront probablement pas écrits dans csh –

Questions connexes