2009-08-30 10 views
5

Ich benutzte sed für eine Batch Ptovess, wo ich es nicht mit awk tun konnte. Kannst du es nicht geschafft haben? Oder ist es eher eine Frage der Wahl und awk und sed für die Nutzung gleich nennen. Sie beide ersetzen die allgemeine Suche ähnlich mit i/o. Gibt es ein gutes Beispiel, was mit dem anderen nicht möglich ist?Was kann awk tun, dass sed nicht kann?

Antwort

8

Ein Hauptunterschied besteht darin, dass ein awk-Programm den Status beibehalten kann und mit mehreren Durchläufen über dieselben Daten arbeiten kann. Ein sed-Aufruf ist notwendigerweise zustandslos single-pass, weil sed (Stream EDitor) inhärent stream-orientiert ist. Der Vorteil ist jedoch, dass das sed einfacher und besser für den Einsatz in Rohrketten geeignet ist.

+2

Ich sehe nicht, dass sed "ist besser geeignet für den Einsatz in Rohrketten" - nur weil awk mehrere Durchgänge durchführen kann, zwingt Sie nichts, dies tatsächlich zu tun. Für viele rohrbezogene Aufgaben (zum Beispiel die Auswahl bestimmter Felder) ist awk viel einfacher zu benutzen als sed. –

+0

@anon Es kommt mir seltsam vor, wie Sie diesen Thread in etwas "awk vs sed" Zeug drehen. Überhaupt nicht hilfreich. – ata

+0

Ich änderte dies zur angenommenen Antwort. Vielen Dank! –

2

SED ist ein Stream-Editor und hat daher keine Variablen und einige andere Konstrukte wie AWK. AWK ist eine vollwertige Sprache.

+0

Ist AWK, anders als sed, gut zum Finden und Ersetzen von Unicode- oder ASCII-Codes geeignet? so behandelt man alle Steuerzeichen einschließlich neuer Zeile, EOF, e.t.c. als binär? – barlop

2

G'day,

Awk ist leistungsfähiger. sed ist tendenziell begrenzter in dem, was es tun kann.

Sed eignet sich für zeilenbasierte Änderungen an Daten. Es hat einige einfache Schleifenkonstrukte, die üblichen ed/ex/vi Regexp-Sachen und Substitutionsdinge, zusammengesetzte Aussagen, Entscheidungen usw. Die meisten Leute benutzen es zum Ändern von Piped-Daten.

Awk ist gut zum Filtern oder Umordnen von Daten. Es wird hauptsächlich für das Reporting verwendet.

Ich würde vorschlagen, ein Blick auf Dale Dougherty ausgezeichnete Buch "sed & Awk" (sanitised Amazon link). BTW Es hat auch eine der besten Erklärungen für Regexps drin.

Viele Leute würden sagen, verwenden Sie trotzdem Perl! (-:

Edit: vergessen zu sagen, dass die awk Sprache ist ziemlich C wie die ist keine Überraschung, da die 'k' in awk steht für Brian Kernighan Ja Die Brian Kernighan

..!

auch sed, funktioniert nur Ströme auf Daten während awk auf beiden Datenströme und Dateien arbeitet.

HTH

prost, nur sed auf Datenströmen arbeitet, während awk sowohl auf Datenströme und Dateien arbeitet.

+1

GNU sed unterstützt tatsächlich die Dateibearbeitung vor Ort. –

+0

Ja.Aber, wie Sie sagen, die Option -s ist GNU-spezifisch. Vanilla sed-Implementierungen basieren auf Datenströmen. Das ist es. –

6

In dem ursprünglichen (und immer noch das beste) Buch, The AWK Programming Language werden folgende umgesetzt (unter vielen anderen Dingen):

  • eine einfache Assembler
  • rekursiven Abstieg Compiler
  • eine Textindizierung Programm

Versuchen Sie es mit sed.

+1

Ich denke, dass dies die Antwort auf eine komplett andere Frage ist. Die Frage ist "Was kann awk nicht, dass sed kann?", Nicht "was awk tun kann, dass sed nicht kann". Nur zu sagen: "awk ist besser, stärker, schneller" beantwortet die Frage überhaupt nicht. –

3

Das einzige, was ich mir vorstellen kann ist, dass sed kleine Änderungen in weniger Charcount die awk tun kann. Für schnelle Änderungen an einer Live-Shell ist es daher schneller zu tippen.