J'ai une commande sed que je veux exécuter sur un énorme, hideux, hideux fichier HTML qui a été créé à partir d'un document Microsoft Word. Tout ce qu'il doit faire est de supprimer toute instance de la chaîneCorrespond à n'importe quel caractère (y compris les nouvelles lignes) dans sed
style='text-align:center; color:blue;
exampleStyle:exampleValue'
La commande sed que je suis en train de modifier est
sed "s/ style='[^']*'//" fileA > fileB
Il fonctionne très bien, sauf que chaque fois qu'il ya une nouvelle ligne à l'intérieur du texte correspondant, il ne correspond pas. Y a-t-il un modificateur pour sed, ou quelque chose que je peux faire pour forcer la correspondance de n'importe quel caractère, y compris les newlines? Je comprends que les regexps sont terribles en XML et HTML, bla bla bla, mais dans ce cas, les patterns de chaînes sont bien formés en ce que les attributs de style commencent toujours par un guillemet simple et se terminent par un guillemet simple. Donc, si je pouvais juste résoudre le problème de la nouvelle ligne, je pourrais réduire la taille du HTML de plus de 50% avec juste cette commande. En fin de compte, il s'est avéré que le script perl de Sinan Ünür fonctionnait le mieux. C'était presque instantané, et il a réduit la taille du fichier de 2,3 Mo à 850k. Good ol 'Perl ...
sed est basé sur une ligne. C'est le point d'arrêt principal ici.Si vous utilisez le modificateur/g regex, il peut y avoir une option de ligne de commande pour l'obtenir pour lire le fichier comme une seule ligne, mais j'en doute (problèmes de mémoire et autres) –
Il n'y a pas d'option (que je connaisse) pour lire un fichier en une seule ligne. J'utiliserais Perl pour ça. – Dana
Mais sed dispose de moyens pour ajouter de nouvelles lignes dans l'espace de modèle et dans l'espace de stockage, il est donc possible de faire un traitement multi-lignes dans sed - ce n'est pas joli. – Beano