Umleitung auf Standard-Eingabedatei

Woodz

Lieutenant
Registriert
Apr. 2009
Beiträge
721
Hallo,

ich versuche gerade mir ein paar Grundkenntnisse in Ubuntu anzueignen und arbeite zu diesem Zwecke ein Grundlagen-Buch durch.
In diesem wird das Thema "Redirection und Pipelines" behandelt. Dabei soll ich den Inhalt einer Datei "a.txt" über die Standard-Eingabedatei umleiten.
also: cat < a.txt

Nun meine Frage. Wozu ist dies denn notwendig? Ich mein den Inhalt kann ich mir doch sowieso mit cat a.txt anzeigen lassen. Wozu eine Umleitung auf Standard-Eingabe / - Ausgabedatei?
Kann mir jemand den Unterschied erklären und wenn möglich einen Nutzen den ich daraus ziehen kann?

Beste Grüße;)
 
Da hast du schon recht, das geht auch anders. Ist das schöne an Unix, es führen immer mehrere Wege zum Ziel.

Das kannst du nutzen, wenn du eine Schleife bauen willst. Habe das mal für folgendes genutzt:

awk -v FS=: '$2=="ONLINE" { print $1; }' < $hostlist

alternativ wäre das mit das mit cat $hostlist | awk -v FS=: '$2=="ONLINE" { print $1; }' gegangen.


Die Umleitung auf die Standardausgabe nutzt man oft, um Logfiles zu erzeugen oder wenn man Dinge automatisiert um es wegzuwerfen. 1>blabla.log oder 1>/dev/null
 
Ahh, ok. Ich glaub ich habs verstanden. Hat doch einen recht hohen praktischen Nutzwert.
Vielen Dank für deine Hilfe;)
 
Auf die Standart-Eingabe habe ich auch noch nie was leiten müssen..
Aber z.b. Pipelines benötige ich des öfteren, z.b. in zusammenhang mit "grep":
ps -ef |grep firefox
um zu sehen, ob firefox auf dem system irgendwie aktiv ist.. (ist jetzt nur ein beispiel, normalerweise suche ich so nach daemons)

oder wenn ein skript welches du mit inittab oder als cronjob ausführst in ein File schreiben soll:
some-command >> /tmp/log.log 2>&1
Damit gibst du an, dass die Fehler ebenfalls auf die Standartausgabe geschrieben werden sollen, welche nun aber ins log-file geschrieben werden..
 
je nach Befehlsverkettungen mit Pipelines kommt man manchmal auch nicht um eine Umleitung mittel < nicht drum rum.(Wobei es dann aber auch meist bessere/sinnvollere Befehlsverkettungen gibt^^)
 
du solltest auf jeden fall dinge wie cat file | grep xxx vermeiden. sinnvoller wäre grep xxx file oder mit <
 
Danke für eure Hilfe bei diesem Problem. Doch irgendwie komm ich schon wieder nicht weiter. Ich hatte vor in einer Testdatei bestimmte Ausdrücke zu suchen diese dann zu sortieren und in eine andere Datei auszugeben.

Beispiel:

--> $ cat < Testdatei_0 | grep file?.jpg | sort > Testdatei_1

Die Testdatei_0 beinhaltet irgendwelche Einträge...z.b.

file1.jpg
file2.jpg
file23.jpg
file34.jpg

nun habe ich das Problem, dass die Ausgabe in Testdatei_1 leer ist, sprich die Datei ist leer.
Nun habe ich mal eine einfache Inhaltssuche durchgeführt.

--> grep file?.jpg Testdatei_0

aber er listet mir nichts auf, obwohl doch "?" die Wildcard für genau ein Zeichen an dieser Stelle ist. Eigentlich müsste doch file1.jpg und file2.jpg, erscheinen, oder hab ich da was falsch verstanden?
Die Wildcards "*" und "[]" funktionieren wie sie sollen, nur mit "?" hab ih Probleme.

Grüße;)
 
Zuletzt bearbeitet:
Ja du hast da was falsch verstanden.

--> grep file?.jpg Testdatei_0
das bedeutet nicht, dass in der Datei Testdatei_0 alle Einträge mit fileX.jpg gesucht werden. Wenn du es so in deine Commandline eingibst passiert eine Pattern Expansion und die Shell sucht nach Dateien file?.jpg im aktuellen Verzeichnis.
Wenn du mit grep nach Pattern in Dateien suchen willst, dann müssen die
1) gequoted werden
2) regexp verwendet werden

zusammen ergibt das
grep -E "file.?\\.jpg" Testdatei_0
 
Zuletzt bearbeitet:

Ähnliche Themen

M
Antworten
10
Aufrufe
1.425
Zurück
Oben