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

Bash-Script: Auslesen einer Zeile einer Datei?

Xero

Member
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.
 
A

Anonymous

Gast
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
 
OP
X

Xero

Member
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...
 
A

Anonymous

Gast
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
 

regexer

Advanced Hacker
head -2 Datei | tail -1 | cut -b 5-
Eine entsprechende Lösung in sed würde so aussehen:
Code:
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:
 
OP
X

Xero

Member
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 ;-)
 

regexer

Advanced Hacker
Xero schrieb:
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
 
Oben