Bash-Script mit Grep zum suchen eines Musters in einer Datei
Ich Schreibe ein bash-Skript zum suchen eines Musters in einer Datei mit GREP. Ich bin ratlos, warum es nicht funktioniert. Dies ist das Programm
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
Oder ist es anderen Ansatz, dies zu tun ?
Dank
(Inhalt der Datei)
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 |
(Muster)
`UNIX` or `unix`
- grep sollte geleitet werden afaik so tun
ls -l | grep '^d'
zum Beispiel werden wieder alle Verzeichnisse, die in der aktuellen Lage... - grep aus einer Liste von Dateinamen oder einen Platzhalter. Es muss nicht gepumpt werden.
- Hat Ihr Muster, die Zeichen enthalten, müssen escaped werden?
- Müssen Sie auch, um zu zeigen, verwenden Sie (1) den Inhalt der Datei, die Sie grepping; und (2) das Muster, das Sie sind, zu betreten.
- Wenn Ihr Muster enthält Sonderzeichen verwenden
grep -F
um Sie zu deaktivieren. - Ist dieses Skript nur für Lern Zwecke, oder sind Sie eigentlich vor sich geht, dies zu nutzen?
- seiner gerade für das lernen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Anführungszeichen
$pattern
in die grep-Anweisung stellen Sie die Schale nicht lösen die shell-variable, so sollten Sie doppelte Anführungszeichen verwenden.Nur einer von denen, Semikolons notwendig ist (die man vorher
then
), aber ich in der Regel auslassen und setzenthen
auf einer Linie von selbst. Sie sollten setzen Sie doppelte Anführungszeichen um die variable, die Sie als echo und um die variable halten Sie Ihregrep
Muster. Variablen, die halten Dateinamen sollten notiert werden, auch. Sie könnenread
zeigen Sie Ihre Eingabeaufforderung. Sollten Sie verwenden$()
anstelle von backticks.read-p "Geben Sie den Dateinamen..." fname
read-p "Geben Sie den Suchbegriff ein" Muster
if [ -f "$fname" ]
dann
Ergebnis=$(grep-i -v -e $Muster -e "$fname")
echo "$result"
fi