• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Zeilennummer auslesen

jacos

Newbie
Ich bin neu hier, und weiss auch nicht ob meine Frage hier reinpasst.

Gibt es einen Befehl mit dem ich in einer Datei nach einem bestimmten Wort suche und mir dann die Zeilennummer zurückgibt. Ich weiss dass grep -n das kann. Grep -n gibt mir aber nach der Zeilennummer noch das gesuchte Wort aus. Oder wie kann ich die Zeilennummer in einer Variablen abspeichern???

Beispiel:
grep -n "hallo" datei

ergibt z.B.

14:hallo

hier möchte ich jetzt die 14 in einer Variablen abspeicher, damit ich die Zahl weiterverarbeiten kann.
 

regexer

Advanced Hacker
Hallo,

Deine Vermutung ist richtig!

grep -n gibt die Zeilennummer aus.

Wenn du den Zeileinhalt selbst nicht willst, kannst du alles ab dem Doppelpunkt abscheinden. Zum Beispiel mit:

grep -n "hallo" datei | cut -d':' -f1

Wenn die datei mehrmals "hallo" enthält und du nur den ersten Treffer willst:

grep -n "hallo" datei | cut -d':' -f1 | head -1

Für den letzten Treffer einfach den Befehl "head" durch "tail" ersetzen.

Wenn du das ganze noch in einer Umgebungs-Variablen haben willst:

variable=`grep -n "hallo" datei | cut -d':' -f1 | head -1`

Dabei ist darauf zu achten, dass der komplette Befehlssatz mit accent grave und NICHT mit einfachen Hochkommas eingerahmt ist.

Alles klar?
 
OP
J

jacos

Newbie
Danke. Das hat mich schon mal sehr viel weiter gebracht.
Gibt es auch noch die Möglichkeit, wenn hallo sehr oft vorkommt nur die Nummer der z.B. fünften gefundenen Zeile in einer Variablen abzuspeichern?
 

regexer

Advanced Hacker
jacos schrieb:
wenn hallo sehr oft vorkommt nur die Nummer der z.B. fünften gefundenen Zeile in einer Variablen abzuspeichern?
Code:
variable=`grep -n "hallo" datei | cut -d':' -f1 | head -5 | tail -1`
head -5 zeigt die ersten fünf Treffer
tail -1 zeigt davon wiederum die letzte Zeile, also die fünfte

Solle es jedoch nur vier Treffer geben, wird der vierte genommen. "Head" und "tail" lassen sich übrigens auch auf normale Dateien anwenden.
head -5 datei | tail -1 zeigt ebenfalls die fünfte Zeile einer Datei.
 
Oben