Ich versuche ein sed-Skript zu schreiben, das alle "nackten" URLs in einer Textdatei erfasst und sie durch <a href=[URL]>[URL]</a>
ersetzt. Mit "nackt" meine ich eine URL, die nicht in einem Anker-Tag eingeschlossen ist.
Mein ursprünglicher Gedanke war, dass ich URLs, die kein "oder ein & gt; vor ihnen haben, und auch kein & lt; oder a" hinter ihnen haben sollte. Allerdings stoße ich in Schwierigkeiten mit dem Ausdruck "habe nicht vor oder hinter", denn soweit ich weiß, hat sed weder Vorausblick noch Rückblick.
Beispieleingabe:
%Vor%Beispiel für eine gewünschte Ausgabe:
%Vor% Beachten Sie, dass die dritte Zeile unverändert ist, da sie sich bereits in <a href>
befindet.
Auf der anderen Seite sind sowohl die erste als auch die zweite Zeile modifiziert.
Beachten Sie schließlich, dass alle Nicht-URL-Texte unverändert sind.
Letztendlich versuche ich etwas wie:
%Vor%Zuerst habe ich überprüft, ob die folgenden URLs richtig übereinstimmen und entfernt:
%Vor%Ich habe es dann versucht, aber es ist nicht in der Lage URLs zu finden, die am Anfang der Datei / Eingabe beginnen:
%Vor%Gibt es eine Möglichkeit, dies in sed zu umgehen, indem Sie Lookbehind / Lookahead simulieren oder den Anfang und das Ende der Datei explizit abgleichen?
sed ist ein ausgezeichnetes Werkzeug für einfache Ersetzungen in einer Zeile, für alle anderen Textbearbeitungsprobleme einfach awk.
Überprüfen Sie die Definition, die ich im BEGIN-Abschnitt unten für eine reguläre Suche verwende, die URLs entspricht. Es funktioniert für Ihr Beispiel, aber ich weiß nicht, ob es alle möglichen URL-Formate erfasst. Auch wenn es nicht für Ihre Bedürfnisse geeignet ist.
%Vor%Das offensichtliche Problem mit Ihrem Befehl ist
%Vor% Das ist das Seltsame an sed
regex. Es ist anders als bei Perl regex, dass viele Symbole standardmäßig "literal" sind. Sie müssen ihnen entkommen, um zu "funktionieren". Probieren Sie:
Tags und Links regex sed awk regex-lookarounds regex-negation