Ich weiß also, dass es für dieses Problem Tools gibt, weil ich davon gehört habe, aber ich weiß nicht, was sie sind.
Ich möchte so etwas wie alle Daten außer den Benutzernamen in / etc / passwd herausfiltern.
Zum Beispiel möchte ich Benutzer1, Benutzer2 und Benutzer3 aus der folgenden Datei holen. In diesem Fall könnte die Logik "Text bis zum ersten ':' in jeder Zeile der Datei abrufen" lauten.
user1:x:1:4
user2:x:2:5
user3:x:3:6
Die Ausgabe wäre:
user1
user2
user3
awk
Nimmt einen Dateinamen, so dass Sie die Pipe überspringen und einfach tun könnenawk -F: '{print $1}' /etc/passwd
tr
undat
sind einige Beispiele für die wenigen Dinge, die dies nicht tun).Hier ist ein Perl-Einzeiler:
quelle
Unter Perl und Awk gibt es ein drittes Tool für solche Jobs, das sed:
Dies ist der Ersetzungsbefehl: Ersetzen durch Doppelpunkt:, gefolgt von einem Punkt, der ein Joker für Zeichen jeglicher Art, beliebiger Anzahl (*) und nichts ist.
Es ist 's (ubstitute) / FROM / TO /', wobei TO leer ist, was bedeutet, dass 'alles aus dem ersten (da sed standardmäßig gierig ist) Doppelpunkt (bis zum Zeilenende, da sed gut mit ganzen Zeilen funktioniert) gelöscht wird.
Natürlich
cut
ist das auch ein guter Befehl, aber ich würde sagen, aus einer anderen Familie.quelle
In Ihrem Beispiel sind alle 3 Namen gleich lang. In solchen Fällen - was passieren kann, aber mit / etc / passwd nicht so wahrscheinlich - können Sie auch colrm verwenden:
oder natürlich
(Ein seltener Fall, in dem
useless use of cat
dies nicht zutrifft, da Sie eine DATEI nicht als Parameter übergeben können.)quelle
cat
ist dort noch nutzlos :colrm 6 < FILE
.cat foo | grep bar
.Der Vollständigkeit halber sind keine externen Befehle erforderlich, die Shell (Bourne-Shell oder kompatibel) kann sie alleine verarbeiten:
Natürlich ist dies wahrscheinlich die langsamste aller möglichen Lösungen. Wählen Sie daher für große Dateien eine andere aus.
quelle