2010-06-16 7 views
8

Sto scrivendo uno script bash per cercare un pattern in un file usando GREP. Sono senza tracce per il motivo per cui non funziona. Questo è il programmaBash Script che utilizza Grep per cercare un pattern in un file

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 

Oppure c'è un altro approccio per farlo?

Grazie


(il contenuto del file)

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 | 

(modello)

`UNIX` or `unix` 
+0

grep deve essere collegato in pipe, quindi facendo 'ls -l | grep '^ d''per esempio restituirà tutte le directory nella posizione corrente ... – deostroll

+1

grep funzionerà da un elenco di nomi di file o da un carattere jolly. Non deve essere convogliato. – Curtis

+0

Il tuo pattern include caratteri che devono essere sottoposti a escape? –

risposta

15

le virgolette singole intorno $pattern nell'istruzione grep fanno la shell non risolve il guscio variabile, quindi dovresti usare le virgolette.

+0

provato, ma mi mostra solo le ultime 2 righe. Il file contiene 5 righe e il –

+0

come detto, per favore pubblica il contenuto del file e il tuo modello $. –

4

Solo uno di questi punti e virgola è necessario (quello prima then), ma di solito lo ometto e metto then su una riga da solo. Dovresti inserire virgolette doppie attorno alla variabile che stai facendo eco e attorno alla variabile che contiene il tuo pattern grep. Anche le variabili che contengono nomi di file devono essere citate. È possibile avere read visualizzare il prompt. Dovresti usare $() invece che i backtick.

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

leggere -p "Inserire il nome del file ..." fname leggere -p "Inserire il modello di ricerca" modello if [-f "$ fname"] quindi risultato = $ (grep -i -v -e $ modello -e "$ fname") echo "$ result" fi

+1

Si prega di utilizzare codiceformato nel tuo post –

Problemi correlati