Gibt es Standardversionen von `sed`, auf denen` -E` nicht unterstützt wird?


7

Auf BSD sed -Eist das Flag "Extended Regex". Auf GNU sed heißt es in der Dokumentation, dass -res sich um das erweiterte Regex-Flag handelt, aber der -ESwitch funktioniert auch (obwohl in meiner Forschung nicht dokumentiert).

Ich erinnere mich, dass ich irgendwo gelesen habe, -Ewas in der nächsten Ausgabe der POSIX-Spezifikationen angegeben wird, aber ich kann nicht finden, wo ich das gelesen habe.

(Ist das wahr? Gibt es eine maßgebende Referenz für das, oder ein Benutzer hier die ist eine Autorität?)

Wie tragbar ist der -ESwitch sed?

Gibt es Standardversionen (dh POSIX-kompatible Versionen), seddie -Enicht unterstützt werden? (Welche?)

Warum ist die -EFlagge für GNU sed nicht dokumentiert?


1
Ich kann nicht erklären, warum sie es getan haben, aber die Quelle für GNU sed enthält den Kommentar zur Verarbeitung -E: /* Undocumented, for compatibility with BSD sed. */und behandelt es genauso wie-r
Eric Renouf

@ EricRenouf, schöner Fund; Können Sie auch einen Link bereitstellen? :)
Wildcard

1
Zufällig hatte ich Glück mit der Version der Quelle, die ich mir angesehen habe, aber ich werde Ihnen jetzt eine bessere machen. Hier ist das Commit, bei dem der von mir zitierte Kommentar entfernt wurde, und es enthält dort die Protokollmeldung "Dokumentation ändern, um sed" -E "jetzt in POSIX für EREs zu notieren.", Die am 16.10.2013 erstellt wurde Ich bin überrascht, dass es nicht in die Dokumentation oder ähnliches gekommen ist, obwohl meine Cent OS 7-Box noch eine Version von 2012 hat
Eric Renouf

1
Das heißt, ich kann den Verweis darauf nicht in der neuesten (glaube ich) POSIX-Dokumentation für sed finden
Eric Renouf

@EricRenouf, Dieses Commit (und die damit verknüpfte Seite ) beantwortet fast jeden Teil meiner Frage. Könnten Sie bitte Ihrem Kommentar eine Antwort geben? :)
Wildcard

Antworten:


8

GNU fügte zunächst undokumentierte Unterstützung hinzu, um -Enur mit der BSD-Syntax kompatibel zu sein, und die Quelle enthielt den Kommentar

/ * Undokumentiert, aus Kompatibilitätsgründen mit BSD sed. * /

Aber im Jahr 2013 wurde das in diesem Commit mit der Protokollmeldung entfernt

Ändern Sie die Dokumentation, um die Option sed "-E" für EREs in POSIX zu notieren.

und das Commit verweist auf einen Fehler-Tracker für POSIX auf dieser Seite , der als akzeptiert markiert, indem das -EFlag zu den sedArgumenten hinzugefügt wird

Es scheint es nicht in die neueste POSIX-Spezifikation ( sed spezifischer Teil ) geschafft zu haben, aber ich denke, es kommt.


Natürlich fehlt es auch in älteren Distributionen. Ich habe gerade herausgefunden , dass die Sed in RHEL 5 enthielt nicht unterstützt -E, obwohl es tut Unterstützung -r. (Dies mag für Umgebungen mit alten Systemen offensichtlich erscheinen, aber ich hatte vergessen, dies zu überprüfen.)
Wildcard

@ Wildcard Ich denke, das macht Sinn. Da sie die hinzugefügt haben -E, um mit anderen Flags kompatibel zu sein, musste es eine Zeit geben, die vor dieser Hinzufügung lag
Eric Renouf

6

Der Ort, an dem Sie nachsehen müssen, sind Systeme, die zertifiziert sind:

OSX hat es, aber ob es BSD- oder GNU-first ist, war nicht Teil der Frage.


2
Angesichts des Kommentars, den ich in der GNU-Quelle gefunden habe, ist es sicher anzunehmen, dass BSD es zuerst getan hat
Eric Renouf

1
Scheint seltsam, dass dies nicht die akzeptierte Antwort ist ...
don_crissti
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.