0

I want to get rid of everything between patterns "< >" including patterns using bash.

I have tried those sed commands, but it's not giving the result i want.

sed 's/<.*>//g'

sed -r 's/<[^ ][^ ]*>//g'

For instance

From:

<span class="tlf_cdefinition">Qui ordonne, dispose, met en ordre.</span> <span class="tlf_cexemple"><i>Le geste humain (...) renonce à prendre; il met la chose en place et la considère; tout est spectacle pour l'homme, et même son action. Non point doux par cela seul; redoutable au contraire par cette activité ordinnatrice </i>[<i>sic</i>] (<span class="tlf_cauteur"><span class="tlf_smallcaps">Alain</span></span><span class="tlf_ctitre">, <i>Propos</i></span><span class="tlf_cdate">, 1921</span>, p.271).</span><div class="tlf_parothers"><b>Rem.</b> On emploie de préférence auj., dans ce sens, <i>ordonnateur, -trice</i>.</div></div><div class="tlf_parah"><span class="tlf_cplan"><b>II. −</b></span> <span class="tlf_cemploi"><i>Subst. masc.</i></span> <div class="tlf_parah"><span class="tlf_cplan"><b>A. −</b></span> <span class="tlf_cdomaine"><i>LITURG.</i>,</span> <span class="tlf_cemploi"><i>vx.</i></span> <span class="tlf_cdefinition">Celui qui confère le sacrement d'un ordre ecclésiastique. (<span class="tlf_csource">Dict. <span class="tlf_smallcaps">xix</span><sup>e</sup>et <span class="tlf_smallcaps">xx</span><sup>e</sup>s.</span>).</span> </div><div class="tlf_parah"><span class="tlf_cplan"><b>B. −</b></span> <span class="tlf_cdomaine"><i>INFORMAT.</i></span> <span class="tlf_cdefinition">Machine algorithmique composée d'un assemblage de matériels correspondant à des fonctions spécifiques, capable de recevoir de l'information, dotée de mémoires à grande capacité et de moyens de traitement à grande vitesse, pouvant restituer tout ou partie des éléments traités, ayant la possibilité de résoudre des problèmes mathématiques et logiques complexes, et nécessitant pour son fonctionnement la mise en oeuvre et l'exploitation automatique d'un ensemble de programmes enregistrés.</span> <span class="tlf_csyntagme"><i>Éléments périphériques d'un ordinateur; adresse, console, pupitre d'un ordinateur; imprimante, mémoire d'un ordinateur;</i></span> <span class="tlf_csyntagme">

I want to keep only that:

Qui ordonne, dispose, met en ordre.Le geste humain (...) renonce à prendre; il met la chose en place et la considère; tout est spectacle pour l'homme, et même son action. Non point doux par cela seul; redoutable au contraire par cette activité ordinnatrice [] (Alain, Propos, 1921, p.271).Rem. On emploie de préférence auj., dans ce sens, ordonnateur, -trice.II. −Celui qui confère le sacrement d'un ordre ecclésiastique. (Dict. xixeet xxes.).B. −INFORMAT.Machine algorithmique composée d'un assemblage de matériels correspondant à des fonctions spécifiques, capable de recevoir de l'information, dotée de mémoires à grande capacité et de moyens de traitement à grande vitesse, pouvant restituer tout ou partie des éléments traités, ayant la possibilité de résoudre des problèmes mathématiques et logiques complexes, et nécessitant pour son fonctionnement la mise en oeuvre et l'exploitation automatique d'un ensemble de programmes enregistrés.Éléments périphériques d'un ordinateur; adresse, console, pupitre d'un ordinateur; imprimante, mémoire d'un ordinateur;

Benjamin W.
  • 46,058
  • 19
  • 106
  • 116
  • 1
    Oh boy... I hope you're not trying to [parse HTML with regex](https://stackoverflow.com/a/1732454/1954610)? TH̘Ë͖́̉ ͠P̯͍̭O̚​N̐Y̡ H̸̡̪̯ͨ͊̽̅̾̎Ȩ̬̩̾͛ͪ̈́̀́͘ ̶̧̨̱̹̭̯ͧ̾ͬC̷̙̲̝͖ͭ̏ͥͮ͟Oͮ͏̮̪̝͍M̲̖͊̒ͪͩͬ̚̚͜Ȇ̴̟̟͙̞ͩ͌͝S̨̥̫͎̭ͯ̿̔̀ͅ – Tom Lord May 15 '19 at 13:16
  • `sed 's/<[^>]*>//g'`? – Benjamin W. May 15 '19 at 14:39

1 Answers1

0

As the comment by @Tom above alludes, using regex to parse HTML is generally evil. That being said, if you only have single level (non nested) HTML tags, then regex might work here. But, Sed's regex engine is not very powerful, as it does not support lazy dot. Here is a way to do this using Perl in the Bash:

echo "<span class=\"tlf_cdefinition\">Qui ordonne, dispose, met en ordre.</span> <h1>Hello World!</h1>"
    | perl -pe 's|<[^>]+>(.*?)</[^>]+>|\1|g'

This outputs:

Qui ordonne, dispose, met en ordre. Hello World!
Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
  • Ok thanks guys, and sorry for this question which has been already asked too many times apparently :/ . And i know parsing HTML with regex is evil, but i'm trying hard on sed with different use cases. But i guess sometimes we have to let it go :) – Deft Bringer May 15 '19 at 14:21
  • The trick, @DeftBringer, is to obfuscate your inputs, so that they don't know you're parsing HTML with a regex. Then, they'll happily answer your question. ;) – Alex Harvey May 15 '19 at 15:42