Fatmawati Achmad Zaenuri/Shutterstock

Unter Linux |_+_| ist ein Befehlszeilen-Textmanipulationsdynamo sowie eine leistungsstarke Skriptsprache. Hier ist eine Einführung in einige seiner coolsten Funktionen.



VERBUNDEN: 10 grundlegende Linux-Befehle für Anfänger

Wie awk zu seinem Namen kam

Die |_+_| Der Befehl wurde mit den Initialen der drei Personen benannt, die 1977 die Originalversion geschrieben haben: Alfred Aho , Peter Weinberger , und Brian Kernighan . Diese drei Männer waren aus dem legendären AT&T Bell-Labors Unix-Pantheon. Mit den Beiträgen vieler anderer seitdem |_+_| hat sich weiter entwickelt.

Es ist eine vollständige Skriptsprache sowie ein vollständiges Toolkit zur Textbearbeitung für die Befehlszeile. Wenn dieser Artikel Appetit macht, können Sie Schau dir jedes Detail an über |_+_| und seine Funktionalität.

Regeln, Muster und Aktionen

|_+_| arbeitet an Programmen, die Regeln enthalten, die aus Mustern und Aktionen bestehen. Die Aktion wird für den Text ausgeführt, der dem Muster entspricht. Muster werden in geschweifte Klammern (|_+_|) eingeschlossen. Ein Muster und eine Aktion bilden zusammen eine Regel. Das gesamte |_+_| Programm ist in einfache Anführungszeichen (|_+_|) eingeschlossen.

Schauen wir uns die einfachste Art von |_+_| . an Programm. Es hat kein Muster, also stimmt es mit jeder Textzeile überein, die in es eingegeben wird. Dies bedeutet, dass die Aktion in jeder Zeile ausgeführt wird. Brunnen Verwenden Sie es für die Ausgabe von die |_+_| Befehl.

Hier ist die Standardausgabe von |_+_|:

awk

Anzeige

Vielleicht brauchen wir nicht all diese Informationen, sondern möchten nur die Namen auf den Konten sehen. Wir können die Ausgabe von |_+_| . weiterleiten in |_+_| und dann |_+_| um nur das erste Feld zu drucken.

seitenzahlen in word anzeigen

Standardmäßig ist |_+_| betrachtet ein Feld als eine von Leerzeichen umgebene Zeichenfolge, den Anfang einer Zeile oder das Ende einer Zeile. Felder werden durch ein Dollarzeichen (|_+_|) und eine Zahl gekennzeichnet. Also, |_+_| stellt das erste Feld dar, das wir mit |_+_| . verwenden werden Aktion, um das erste Feld zu drucken.

Wir geben folgendes ein:

awk

|_+_| druckt das erste Feld und verwirft den Rest der Zeile.

Wir können beliebig viele Felder drucken. Wenn wir ein Komma als Trennzeichen hinzufügen, ist |_+_| druckt ein Leerzeichen zwischen jedem Feld.

Wir geben Folgendes ein, um auch die Anmeldezeit der Person auszudrucken (Feld vier):

awk

Es gibt einige spezielle Feldbezeichner. Diese stellen die gesamte Textzeile und das letzte Feld in der Textzeile dar:

    $ 0: Stellt die gesamte Textzeile dar. $ 1: Stellt das erste Feld dar. $ 2: Stellt das zweite Feld dar. $ 7: Stellt das siebte Feld dar. $ 45: Stellt das 45. Feld dar. $NF: Steht für die Anzahl der Felder und repräsentiert das letzte Feld.
Anzeige

Wir geben Folgendes ein, um eine kleine Textdatei anzuzeigen, die ein kurzes Zitat enthält, das zugeschrieben wird Dennis Ritchie :

awk

Wir wollen |_+_| um das erste, zweite und letzte Feld des Angebots zu drucken. Beachten Sie, dass es, obwohl es im Terminalfenster umbrochen ist, nur eine einzelne Textzeile ist.

Wir geben folgenden Befehl ein:

awk

Wir kennen diese Einfachheit nicht. ist das 18. Feld in der Textzeile, und das ist uns egal. Was wir wissen ist, dass es das letzte Feld ist und wir |_+_| . verwenden können seinen Wert zu bekommen. Der Punkt wird nur als ein anderes Zeichen im Feldkörper betrachtet.

Hinzufügen von Ausgabefeldtrennern

Du kannst auch |_+_| . sagen um ein bestimmtes Zeichen zwischen Feldern anstelle des standardmäßigen Leerzeichens zu drucken. Die Standardausgabe von |_+_| Befehl ist etwas eigenartig weil die zeit mittendrin ist. Wir können jedoch Folgendes eingeben und |_+_| . verwenden um die gewünschten Felder zu extrahieren:

{} awk

Wir verwenden die |_+_| (Ausgabefeld-Trennzeichen) Variable, um ein Trennzeichen zwischen Monat, Tag und Jahr zu setzen. Beachten Sie, dass wir den Befehl unten in einfache Anführungszeichen (|_+_|) und nicht in geschweifte Klammern (|_+_|) einschließen:

' awk

Die BEGIN- und END-Regeln

A |_+_| Die Regel wird einmal ausgeführt, bevor die Textverarbeitung beginnt. Tatsächlich wird es vor |_+_| . ausgeführt liest sogar jeden Text. Ein |_+_| Die Regel wird ausgeführt, nachdem die gesamte Verarbeitung abgeschlossen ist. Sie können mehrere |_+_| . haben und |_+_| Regeln, und sie werden der Reihe nach ausgeführt.

Anzeige

Für unser Beispiel eines |_+_| Regel drucken wir das gesamte Zitat aus dem |_+_| Datei, die wir zuvor mit einem Titel darüber verwendet haben.

Dazu geben wir diesen Befehl ein:

who

Beachten Sie die |_+_| Die Regel hat einen eigenen Satz von Aktionen, der in seine eigenen geschweiften Klammern (|_+_|) eingeschlossen ist.

Wir können dieselbe Technik mit dem Befehl verwenden, den wir zuvor verwendet haben, um die Ausgabe von |_+_| . weiterzuleiten in |_+_|. Dazu geben wir Folgendes ein:

who

Eingabefeld-Trennzeichen

Wenn du willst |_+_| Um mit Text zu arbeiten, der keine Leerzeichen zum Trennen von Feldern verwendet, müssen Sie ihm mitteilen, welches Zeichen der Text als Feldtrennzeichen verwendet. Zum Beispiel die |_+_| Datei verwendet einen Doppelpunkt (|_+_|), um Felder zu trennen.

Wir verwenden diese Datei und die |_+_| (Trennzeichenfolge) Option zum Angeben von |_+_| um den Doppelpunkt (|_+_|) als Trennzeichen zu verwenden. Wir geben Folgendes ein, um |_+_| . zu sagen um den Namen des Benutzerkontos und des Home-Ordners auszudrucken:

who

Die Ausgabe enthält den Namen des Benutzerkontos (oder den Namen der Anwendung oder des Daemons) und den Home-Ordner (oder den Speicherort der Anwendung).

Muster hinzufügen

Wenn uns nur normale Benutzerkonten interessieren, können wir unserer Druckaktion ein Muster hinzufügen, um alle anderen Einträge herauszufiltern. Denn Benutzeridentifikation Zahlen gleich oder größer als 1.000 sind, können wir unseren Filter auf diesen Informationen aufbauen.

Anzeige

Wir geben Folgendes ein, um unsere Druckaktion nur auszuführen, wenn das dritte Feld (|_+_|) einen Wert von 1.000 oder höher enthält:

awk

Das Muster sollte unmittelbar vor der Aktion stehen, mit der es verknüpft ist.

Wir können die |_+_| . verwenden Regel einen Titel für unseren kleinen Bericht zu geben. Wir geben Folgendes ein und verwenden die Notation (|_+_|), um ein Zeilenumbruchzeichen in die Titelzeichenfolge einzufügen:

awk

Muster sind vollwertig Reguläre Ausdrücke , und sie sind eine der Herrlichkeiten von |_+_|.

Nehmen wir an, wir möchten die Universally Unique Identifiers (UUIDs) der gemounteten Dateisysteme sehen. Wenn wir die |_+_| . durchsuchen Datei für das Vorkommen der Zeichenfolge UUID, sollte diese Informationen für uns zurückgegeben werden.

Wir verwenden das Suchmuster /UUID/ in unserem Befehl:

awk

Anzeige

Es findet alle Vorkommen von UUID und gibt diese Zeilen aus. Ohne |_+_| . hätten wir das gleiche Ergebnis erhalten action, da die Standardaktion die gesamte Textzeile druckt. Aus Gründen der Klarheit ist es jedoch oft nützlich, explizit zu sein. Wenn Sie ein Skript oder Ihre Verlaufsdatei durchsehen, werden Sie froh sein, dass Sie selbst Hinweise hinterlassen haben.

Die erste gefundene Zeile war eine Kommentarzeile, und obwohl die UUID-Zeichenfolge mittendrin ist, |_+_| habe es noch gefunden. Wir können den regulären Ausdruck optimieren und sagen |_+_| um nur Zeilen zu verarbeiten, die mit UUID beginnen. Dazu geben wir Folgendes ein, einschließlich des Zeilenanfangs-Tokens (|_+_|):

$

Das ist besser! Jetzt sehen wir nur echte Montageanleitungen. Um die Ausgabe noch weiter zu verfeinern, geben wir Folgendes ein und beschränken die Anzeige auf das erste Feld:

Wenn wir mehrere Dateisysteme auf diesem Computer gemountet hätten, würden wir eine übersichtliche Tabelle ihrer UUIDs erhalten.

Eingebaute Funktionen

|_+_| hat viele Funktionen, die Sie in Ihren eigenen Programmen aufrufen und verwenden können , sowohl über die Befehlszeile als auch in Skripten. Wenn Sie etwas graben, werden Sie es sehr fruchtbar finden.

Um die allgemeine Technik zum Aufrufen einer Funktion zu demonstrieren, sehen wir uns einige numerische an. Im Folgenden wird beispielsweise die Quadratwurzel von 625 ausgegeben:

printAnzeige

Dieser Befehl gibt den Arkustangens von 0 (Null) und -1 (was zufällig die mathematische Konstante pi ist) aus:

awk

Im folgenden Befehl modifizieren wir das Ergebnis der |_+_| Funktion, bevor wir sie drucken:

awk

Funktionen können Ausdrücke als Parameter akzeptieren. So können Sie beispielsweise nach der Quadratwurzel von 25 fragen:

awk

awk-Skripte

Wenn Ihre Befehlszeile kompliziert wird oder Sie eine Routine entwickeln, von der Sie wissen, dass Sie sie wieder verwenden möchten, können Sie Ihre |_+_| . übertragen Befehl in ein Skript.

In unserem Beispielskript werden wir Folgendes tun:

windows verknüpfung wechseln windows 10
  • Teilen Sie der Shell mit, welche ausführbare Datei zum Ausführen des Skripts verwendet werden soll.
  • Vorbereitung |_+_| um die |_+_| . zu verwenden Feldtrennvariable zum Lesen von Eingabetext mit durch Doppelpunkte getrennten Feldern (|_+_|).
  • Verwenden Sie die |_+_| Ausgabefeld-Trennzeichen, um |_+_| . zu sagen um Doppelpunkte (|_+_|) zu verwenden, um Felder in der Ausgabe zu trennen.
  • Setzen Sie einen Zähler auf 0 (Null).
  • Setzen Sie das zweite Feld jeder Textzeile auf einen leeren Wert (es ist immer ein x, also müssen wir es nicht sehen).
  • Drucken Sie die Zeile mit dem geänderten zweiten Feld.
  • Erhöhen Sie den Zähler.
  • Drucken Sie den Wert des Zählers.

Unser Skript ist unten gezeigt.

Beispiel für ein awk-Skript in einem Editor.

Die |_+_| Regel führt die vorbereitenden Schritte aus, während die |_+_| Regel zeigt den Zählerwert an. Die mittlere Regel (die weder einen Namen noch ein Muster hat, sodass sie jeder Zeile entspricht) modifiziert das zweite Feld, druckt die Zeile und erhöht den Zähler.

Anzeige

Die erste Zeile des Skripts teilt der Shell mit, welche ausführbare Datei (in unserem Beispiel |_+_|) zum Ausführen des Skripts verwendet werden soll. Es besteht auch die |_+_| (Dateiname) auf |_+_|, die ihm mitteilt, dass der zu verarbeitende Text aus einer Datei stammt. Wir übergeben den Dateinamen an das Skript, wenn wir es ausführen.

Wir haben das Skript unten als Text eingefügt, damit Sie es ausschneiden und einfügen können:

$NF

Speichern Sie dies in einer Datei namens |_+_|. Zu das Skript ausführbar machen Und , geben wir Folgendes mit |_+_| ein:

awk

Jetzt führen wir es aus und übergeben das |_+_| Datei zum Skript. Dies ist die Datei |_+_| wird für uns unter Verwendung der Regeln innerhalb des Skripts verarbeiten:

date

Die Datei wird verarbeitet und jede Zeile wird angezeigt, wie unten gezeigt.

Anzeige

Die x-Einträge im zweiten Feld wurden entfernt, beachten Sie jedoch, dass die Feldtrennzeichen noch vorhanden sind. Die Zeilen werden gezählt und die Summe wird unten in der Ausgabe angezeigt.

awk steht nicht für peinlich

|_+_| steht nicht für peinlich; es steht für eleganz. Es wurde als Verarbeitungsfilter und Berichtersteller beschrieben. Genauer gesagt handelt es sich um beides, oder besser gesagt um ein Tool, das Sie für beide Aufgaben verwenden können. In nur wenigen Zeilen, |_+_| erreicht, was umfangreiche Codierung in einer traditionellen Sprache erfordert.

Diese Macht wird durch das einfache Konzept von Regeln genutzt, die Muster enthalten, die den zu verarbeitenden Text auswählen und Aktionen, die die Verarbeitung definieren.

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · Griff · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · Zustand · ls · fstab · rauswerfen · weniger · chgrp · chown · rev · suchen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · SRM
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · beim · Charge · kostenlos · die · dmesg · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · ja · töten · Schlaf · sudo · seine · Zeit · groupadd · Benutzermod · Gruppen · lshw · stilllegen · neu starten · halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · Locken · wget · Wer · Wer bin ich · In · iptables · ssh-keygen · ufw

VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten

WEITER LESEN