
Ich möchte diese Datei mit sed aufrufen, aber der BRE in sed funktioniert nicht so gut, wie ich es mir erhoffe.
Was ich jetzt habe, ist im Grunde nur:
$ cat Dungeon | grep -P -o '<\/.*?>'
Meine Frage ist, wie ich das per sed ausführe. Ich möchte die Teile entfernen, die ich per grep auslesen konnte. Alternativen sind auch willkommen; wenn möglich möchte ich aber auch wissen, wie ich das bewerkstelligen kann.
(Ja, ich verwende reguläre Ausdrücke für HTML)
Antwort1
Verwenden Sie das Tool „PCRE sed“:
cat Dungeon | perl -pe 's/<\/.*?>//g'
perl -i -pe 's{</.*?>}{}g' Dungeon
Die Kombination von grep und sed ist unwahrscheinlich; die beiden tauschen nicht genügend Kontext aus, um vorhandene Übereinstimmungen mit ihrer Position in der Datei zu übergeben. Sie könnten versuchen, grep -b
die Byte-Offsets jeder Übereinstimmung zu erhalten (und sie mitetwas anderes als sedum die entsprechenden Bytebereiche aus der Datei zu entfernen) oder versuchen Sie, die grep -o
Ausgabe in einen riesigen regulären Ausdruck umzuwandeln, der für die erweiterten POSIX-regulären Ausdrücke von sed geeignet ist (ändern Sie Zeilenumbrüche in Pipes für a|b|c
die Verzweigungssyntax und stellen Sie sicher, dass alle Sonderzeichen des regulären Ausdrucks maskiert werden – was wiederum einen weiteren „sed“-Aufruf erfordert). Beides wäre jedoch mit deutlich mehr Aufwand verbunden, als es wert ist.