Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.

Bash-Script: Auslesen einer Zeile einer Datei?

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Xero
Member
Member
Beiträge: 107
Registriert: 31. Dez 2003, 15:43
Wohnort: Baden-Württemberg
Kontaktdaten:

Bash-Script: Auslesen einer Zeile einer Datei?

Beitrag von Xero »

Hallo Leute,

hab da mal ne kurze Frage (eigentlich ist meine Bash-Kenntniss inwischen recht gut, aber sowas hab ich noch nie benötigt, und finde keine Hilfe):

Wie kann ich aus einer bestimmten Datei (die ich naturlich kenne), nur die erste(zweiten, dritten...) Zeile ausgeben (standart-output)? Und am besten davon dann noch erst alles ab dem 5.(6.,7.,...) Zeichen, natürlich auch nur bis zu Ende der Zeile?

Vielen Dank im Vorraus für eure Mühe.
Grüße, Xero

Die Board Suche ist dein Bester Freund, also benutze sie auch!!!!!!!!
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

Die ersten Zeile kannst du mit head anzeigen sieh man head

also head -3 Datei # gibt die die ersten 3 Zeilen einer Datei
Den Zeilenanfang kannst du mit cut abchneiden, siehe man cut

also : head -3 Datei | cut -b 6- # gibt aus der Datei die ersten 3 zeilen ab dem 6. Zeichen aus.

robi
:roll: wenn das nbkr sieht ists gleich unter Konsole zu finden
Xero
Member
Member
Beiträge: 107
Registriert: 31. Dez 2003, 15:43
Wohnort: Baden-Württemberg
Kontaktdaten:

Beitrag von Xero »

gut, schonmal ein anfang...

aber vielleicht hab ich mich missverständlich ausgedrückt: ich will NUR z.B. die 2. Zeile ab dem 5. Zeichen bis zum Ende der Zeile, nicht alle bis zur 2. oder ähnliches.

Also ich mit cut die ersten Zeichen abschneiden kann, brauch ich ja nur noch ein Prog, dass mir Zeile Nummer x aus einer Datei ausgibt.

Aso, is das die falsche Kategorie? :oops: Ich dachte weil ich programmiere...
Grüße, Xero

Die Board Suche ist dein Bester Freund, also benutze sie auch!!!!!!!!
Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3174
Registriert: 25. Aug 2004, 02:13

Beitrag von robi »

ich will NUR z.B. die 2. Zeile ab dem 5. Zeichen bis zum Ende der Zeile
das ende einer Datei kann man mit tail anzeigen siehe man tail

also warum nicht so.
head -2 Datei | tail -1 | cut -b 5-

robi
Xero
Member
Member
Beiträge: 107
Registriert: 31. Dez 2003, 15:43
Wohnort: Baden-Württemberg
Kontaktdaten:

Beitrag von Xero »

Super, perfekt!! Vielen Dank für eure Hilfe, wirklich super schnell :D
Grüße, Xero

Die Board Suche ist dein Bester Freund, also benutze sie auch!!!!!!!!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

head -2 Datei | tail -1 | cut -b 5-
Eine entsprechende Lösung in sed würde so aussehen:

Code: Alles auswählen

sed -n '2{s/^.\{4\}//;p}' Datei
Die Lösung hat einen Vorteil: Hat die Datei nur eine Zeile, wird diese mit der head-tail-Kombination trotzdem ausgegeben. Bei sed nicht. Du musst entscheiden, was richtig ist. Aber ich denke der sed macht's besser ... :wink:
Xero
Member
Member
Beiträge: 107
Registriert: 31. Dez 2003, 15:43
Wohnort: Baden-Württemberg
Kontaktdaten:

Beitrag von Xero »

Ist in dem Fall egal, die Dateien haben alle 5 Zeilen.

Aber der sed ist wirklich eleganter, ich werde wohl den Befehl einbauen. aber der sed war mir schon immer zu kompliziert ;-)
Grüße, Xero

Die Board Suche ist dein Bester Freund, also benutze sie auch!!!!!!!!
Benutzeravatar
regexer
Advanced Hacker
Advanced Hacker
Beiträge: 1005
Registriert: 3. Dez 2004, 09:29
Wohnort: $_

Beitrag von regexer »

Xero hat geschrieben:aber der sed war mir schon immer zu kompliziert
Bin jetzt auch nicht der sed-Guru... Der von mir gepostete Befehl funktioniert so:

Der Paremeter -n bewirkt, dass sed nur beim angeben des Befehls "p" (=print) eine Zeile ausgibt.
Der eigentliche Befehl innerhalb der einfachen Hochkommas bedeutet auseinandergenommen folgendes:

Bei Zeile zwei { ersetze ^.{4} durch nichts ; gib aus}

/ ist der Delimiter für den Befehl "s" (=Ersetzen)
^ ist das Zeichen für den Zeilenanfang
. steht für ein beliebiges Zeichen
{4} ist der Multiplikator, hierbei müssen jedoch die Klammer durch einen Backslash entwertet werden

Wenn man's weiß, ist das alles gar nicht so schwer... :)

Wenn du mehr wissen willst: http://www.linuxfibel.de/sed.htm
Benutzeravatar
nbkr
Guru
Guru
Beiträge: 2857
Registriert: 10. Jul 2004, 15:47

Beitrag von nbkr »

//Shellscript -> Verschieb
Kann gar nicht sein, ich bin gefürchtet Wald aus, Wald ein.
Antworten