2009-10-31 4 views
0

J'essaie d'écrire mon premier script pour rechercher un motif donné dans le fichier texte nommé test. Voici le script:foreach no match -C script shell

#! /bin/csh 
echo -n "enter pattern: " 
    set pattern = $< 
    foreach word (`cat test`) 
     echo $word | egrep $pattern 
    end 

Lorsque je tente de l'exécuter je reçois le message foreach: Aucun résultat trouvé. Je suspecte que le problème est causé par (cat test). Toute aide serait très appréciée.

+0

Cela fonctionne pour moi tel quel (sans espace ajouté). –

+0

Alors peut-être que c'est un problème avec C shell. – Mike55

Répondre

1

est-ce que ça doit être C shell ...? vous pouvez apprendre à rechercher des fichiers en utilisant awk

awk 'BEGIN{ 
printf "Enter Pattern: " 
getline pattern < "-" 
} 
$0 ~ pattern{ 
    print 
} 
' myfile 
+0

oui, malheureusement, c'est le cas. – Mike55

+0

ok problème résolu. Il doit y avoir un espace blanc après l'ouverture et avant la fermeture des supports. – Mike55

1

@Pat - content que vous l'ayez corrigé. Faire une boucle sur les mots du fichier et lancer egrep sur chacun d'entre eux est une façon un peu étrange de le faire - je présume que vous apprenez sur les boucles de shell C, plutôt que de chercher la solution la plus succincte. Vous pouvez correspondre contre le fichier entier en une seule fois:

egrep "\b$pattern\b" test 

Le \b fait match grep sur une limite de mot.

Vous avez ma programmation de sympathie avec csh - voici quelques éléments de réflexion: Csh Programming Considered Harmful.

+0

Merci Martin. C'est une partie de mon devoir et malheureusement nous devons utiliser C shell. En ce qui concerne la programmation Csh considérée comme nuisible, je l'avais déjà lu :). – Mike55