GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wo bekomme ich den neuen String her, nachdem ich `sub` in Awk ausgeführt habe?

Aus der Programmiersprache Awk

Die Funktion sub ( r, s , t ) findet zuerst den längsten
Teilstring ganz links, der mit dem regulären Ausdruck r übereinstimmt im
Zielstring t; es ersetzt dann den Teilstring durch den
Substitutionsstring s .

Die Funktion sub(r,s) ist ein Synonym für sub(r,s,$0) .

In sub ( /ana/, "anda" , "banana" ) , zum Beispiel banana wird
durch bandada ersetzt .

Nach dem Ausführen von sub ( r, s , t ) , wie bekomme ich den neuen String?
Zum Beispiel in sub ( /ana/, "anda" , "banana" ) , wie bekomme ich den neuen String bandada ?

Die sub-Funktion gibt die Anzahl der vorgenommenen Ersetzungen zurück.

Ist die Rückgabe von sub entweder 0 oder 1? Stimmt es, dass es nicht mehr als eins sein kann, weil sub nur die erste Übereinstimmung finden und ersetzen?

Danke.

Akzeptierte Antwort:

Aus dem GNU awk-Handbuch 9.1.3 String-Manipulation Functions:

… das dritte Argument für sub() muss eine Variable, ein Feld oder ein Array
-Element sein. Einige Versionen von awk lassen zu, dass das dritte Argument ein
-Ausdruck ist, der kein Lvalue ist. In einem solchen Fall sub() sucht immer noch
nach dem Muster und gibt null oder eins zurück, aber das Ergebnis der
Ersetzung (falls vorhanden) wird verworfen, weil es keinen Platz gibt,
es abzulegen. Solche Versionen von awk akzeptieren Ausdrücke wie die folgenden:

sub(/USA/, "United States", "the USA and Canada")

Aus Gründen der historischen
Kompatibilität akzeptiert gawk solchen fehlerhaften Code. Die Verwendung eines
anderen nicht änderbaren Objekts als dritten Parameter führt jedoch zu einem schwerwiegenden Fehler
und Ihr Programm wird nicht ausgeführt.

Die Antwort ist also, eine Variable zu verwenden:

awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana

Linux
  1. Linux – Wie erhalte ich die Uhrzeit eines laufenden Prozesses?

  2. Holen Sie sich das Komplement des Ergebnisses eines Ls-Befehls?

  3. Wie bekomme ich das Tty, in dem Bash läuft?

  4. Wo ist die Itoa-Funktion in Linux?

  5. Wo finde ich das Java SDK unter Linux nach der Installation?

Linux – Wo wird der Environment-String tatsächlich gespeichert?

Wo wird die Term-Umgebungsvariable Default gesetzt?

So beheben Sie das Problem „Firefox läuft bereits“ unter Linux

Wie kann ich den temporären Ordner eines Computers abrufen, auf dem Maven ausgeführt wird?

Wo ist der Gem-Befehl in RHEL6?

Wo ist die Gabel () auf der Gabelbombe :(){ :|:&};:?