2010-06-16 9 views
8

J'écris un script bash pour rechercher un motif dans un fichier en utilisant GREP. Je suis désemparé pour pourquoi cela ne fonctionne pas. Ceci est le programmeScript Bash utilisant Grep pour rechercher un motif dans un fichier

echo "Enter file name..."; 
read fname; 
echo "Enter the search pattern"; 
read pattern 
if [ -f $fname ]; then 
    result=`grep -i '$pattern' $fname` 
    echo $result; 
fi 

Ou est-il une approche différente pour le faire?

Merci


(contenu du fichier)

Welcome to UNIX 
The shell is a command programming language that provides an interface to the UNIX operating system. 
The shell can modify the environment in which commands run. 
Simple UNIX commands consist of one or more words separated by blanks. 
Most commands produce output on the standard output that is initially connected to the terminal. This output may be sent to a file by writing. 
The standard output of one UNIX command may be connected to the standard input of another UNIX Command by writing the `pipe' operator, indicated by | 

(modèle)

`UNIX` or `unix` 
+0

grep doit être redirigé par un "afaik", faisant ainsi 'ls -l | grep '^ d''par exemple retournera tous les répertoires dans l'emplacement actuel ... – deostroll

+1

grep fonctionnera à partir d'une liste de noms de fichiers, ou un caractère générique. Il n'a pas besoin d'être canalisé. – Curtis

+0

Votre motif inclut-il des caractères qui doivent être échappés? –

Répondre

15

Les guillemets simples autour $pattern dans la déclaration grep Le shell ne résout pas la coquille variable de sorte que vous devriez utiliser des guillemets doubles.

+0

essayé, mais son affichage de seulement 2 dernières lignes. Le fichier contient 5 lignes et le –

+0

comme dit paxdiablo, s'il vous plaît poster le contenu du fichier et votre $ pattern. –

4

Un seul de ces points-virgules est nécessaire (celui précédant then), mais je l'omets habituellement et met then sur une ligne par lui-même. Vous devez placer des guillemets autour de la variable que vous répétez et autour de la variable contenant votre motif grep. Les variables qui contiennent des noms de fichiers doivent être également citées. Vous pouvez avoir read afficher votre invite. Vous devriez utiliser $() au lieu de backticks.

read -p "Enter file name..." fname 
read -p "Enter the search pattern" pattern 
if [ -f "$fname" ] 
then 
    result=$(grep -i "$pattern" "$fname") 
    echo "$result" 
fi 
0

lire -p pattern "Entrez le nom du fichier ..." fname lire -p "Entrez le motif de recherche" if [-f "$ fname"] alors result = $ (grep -i -v -e $ pattern -e "$ nomfichier") echo "$ result" fi

+1

Veuillez utiliser codeformat dans votre message –

Questions connexes