2017-07-25 2 views
-1

Ich habe eine CSV-Datei, die ich versuche zu bereinigen, und ein Teil davon entfernt HTML-Tags in einigen der Werte. Ich bin auf diese Lösung gestoßen: sed -e 's/<[^>]*>//g' file.html von dieser thread.Regex erfasst keine Zeilenumbrüche, wenn in sed oder perl verwendet

Bevor ich es ausprobierte, testete ich die Regex (/<[^>]*>/g) mit RegExr. Früher habe ich die folgenden als meine Textprobe:

<asd> 
<asd> 
< asdsad 
adsad > 

Auf RegExr alle drei Tags abgestimmt sind, aber wenn ich den sed Befehl verwenden, um die Tags zu entfernen, das dritte Tag bleibt, also ich mit bin links:

< asdsad 
adsad > 

ich muss in der Lage, mehrzeilige Tags sowie zu entfernen, da viele der Tags in der CSV ich versuche, mit Zitaten zu reinigen haben Attribute, wie class="some-class-name", und die Anführungszeichen mit der CSV-Formatierung sind messing .

Ich habe auch einen Perl-Befehl versucht, da Perl bessere Multiline-Handhabung haben soll. Ich versuchte perl -pe 's/<[^>]*>//g' file, aber es hatte das gleiche Ergebnis wie sed.

EDIT: Um Bedenken eines möglichen Duplikats zu adressieren, basierte meine Frage darauf, warum eine Regex-Engine (RegExr) andere Entitäten als eine andere (sed und Perl) erfasst und wie diese anderen die ersten Ergebnisse anzeigen. Die Antwort von possible duplicate geschah, um mein Problem zu lösen, obwohl die Frage von einem anderen (noch ähnlichen) Ort kam.

+0

http://search.cpan.org/dist/HTML-Strip/Strip.pm – xxfelixxx

Antwort

0

Aus Gründen der Klarheit werde ich die Antwort hier veröffentlichen, aus @LukStorms 'Kommentar. Antwort von this thread.

TL; DR: Die -0 Flagge löste das Problem, mindestens mit Perl.

Voll Befehl: perl -0pe 's/<[^>]*>//g' file