ubuntuusers.de

[BASH] Zeile in Textdatei finden

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

vreden123

Anmeldungsdatum:
24. Dezember 2012

Beiträge: Zähle...

Hallo ich habe eine Textdatei mit mehreren Zeilen.

Textinhalt der Datei:

eins
zwei
drei
vier
fünf
sechs

Jetzt möchte ich die Zeile ermitteln in der das Wort "drei" vorkommt. Also Zeile 3.

Ich kann ja per grep nach "drei" oder dem Ausdruck suchen, nur ich brauche die Zeile in die der Fund gemacht wurde.

Bearbeitet von Antiqua:

Codeblock eingefügt, um den Aufbau der Textdatei zu verdeutlichen → Hilfe zur Syntax

theinlein

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 1279

Hi,

du hast ja 'grep' erwähnt. Gut so. grep liefert die gefundenen Zeile.

Wo ist dein Problem? Was meinst du?

vreden123

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2012

Beiträge: 17

Hey,

ja ich hab grad noch mit der Syntax ein paar Probleme. Den Inhalt der Datei habe ich schon in eine Variable geladen bekommen, nur dann muss ich ja den Inhalt mit grep filtern bzw. die Zeilen ermittelt bekommen. (Mehrere Treffer) Also in der Datei steht in mehreren Zeilen "drei" und diese Zeilen brauche ich.

stfischr Team-Icon

Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

Peace.

Wenn du in das Manual von grep hinein schaust, wirst du eine Option finden, die dir die Zeilennummer ausgibt.

Prefix each line of output with the 1-based line number within its input file.

jakon Team-Icon

Lokalisierungsteam

Anmeldungsdatum:
16. November 2009

Beiträge: 419

Solltest du nur die Zahl haben wollen …

1
grep -n drei foo | awk -F: '{ print $1; }'

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

jakon schrieb:

Solltest du nur die Zahl haben wollen …

1
grep -n drei foo | awk -F: '{ print $1; }'

Das kann awk direkt selber, ohne grep ! - oder sed, das kann es auch:

sed -n '/drei/=' foo

LG,

track

jakon Team-Icon

Lokalisierungsteam

Anmeldungsdatum:
16. November 2009

Beiträge: 419

track schrieb:

Das kann awk direkt selber, ohne grep ! - oder sed, das kann es auch:

sed -n '/drei/=' foo

Das ist natürlich schöner! Danke.

vreden123

(Themenstarter)

Anmeldungsdatum:
24. Dezember 2012

Beiträge: 17

Ich habe zu danken ☺

lukas324

Anmeldungsdatum:
15. September 2012

Beiträge: Zähle...

vreden123 schrieb:

Textinhalt der Datei:

eins
zwei
drei
vier
fünf
sechs

Hallo

ich möchte gerne mit sed nicht nur eine Zeile ausgeben, sondern mehrere. Wie geht das?

Mein Versuch klappt leider nicht:

1
2
3
anfang = $(sed -n '/drei/=' foo)
ende = $(sed -n '/fünf/=' foo)
sed -n '$anfang,$ende p' foo

Vielen Dank für die Hilfe. (Vielleicht kann man dieses Beispiel dann noch in den Wikieintrag aufnehmen?)

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

lukas324 schrieb:

Mein Versuch klappt leider nicht:

anfang = $(sed -n '/drei/=' foo)
ende = $(sed -n '/fünf/=' foo)
sed -n '$anfang,$ende p' foo

Lass einfach diese bescheuerten Leerzeichen weg, dann ist die Shell zufireden und der User freut sich !

LG,

track

lukas324

Anmeldungsdatum:
15. September 2012

Beiträge: 41

Hallo

vielen Dank für den Tipp. Ich musste die Anführungszeichen noch ersetzen. Jetzt klappt es endlich!

die Lösung ist

1
2
3
anfang=$(sed -n '/drei/=' foo)
ende=$(sed -n '/fünf/=' foo)
sed -n "$anfang,$ende p" foo

die Bashausgabe ist wie gewünscht:

1
2
3
drei
vier
fünf

Viele Grüße

Antworten |