1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
<html>
<head><meta name="Generator" content="sedsed --htmlize">
<title>Colorized anagrams.gnu.sed</title></head>
<body bgcolor="#000000" text="#ffffff"
link="#ff00ff" alink="#ff00ff" vlink="#ff00ff">
<pre>
<font color="#00ffff"><b>#n</b></font>
<font color="#00ffff"><b>#! /bin/sed -nf</b></font>
<font color="#00ffff"><b># Search for anagrams in a line-feed-delimited (i.e. one word per line)</b></font>
<font color="#00ffff"><b># list of words</b></font>
<font color="#ffff00"><b>H</b></font>
<font color="#00ffff"><b># Sort the letters of the word (preceding it with a @)</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>$</b></font><font color="#ff6060"><b>/</b></font>@<font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#z">z</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="z">z</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>z\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#z">z</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="y">y</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>y\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#y">y</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="x">x</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>x\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#x">x</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="w">w</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>w\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#w">w</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="v">v</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>v\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#v">v</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="u">u</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>u\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#u">u</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="t">t</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>t\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#t">t</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="s">s</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>s\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#s">s</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="r">r</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>r\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#r">r</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="q">q</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>q\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#q">q</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="p">p</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>p\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#p">p</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="o">o</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>o\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#o">o</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="n">n</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>n\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#n">n</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="m">m</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>m\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#m">m</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="l">l</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>l\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#l">l</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="k">k</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>k\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#k">k</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="j">j</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>j\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#j">j</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="i">i</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>i\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#i">i</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="h">h</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>h\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#h">h</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="g">g</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>g\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#g">g</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="f">f</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>f\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#f">f</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="e">e</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>e\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#e">e</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="d">d</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>d\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#d">d</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="c">c</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>c\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#c">c</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="b">b</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>b\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#b">b</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="a">a</a></b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\<font color="#ff00ff"><b>(</b></font>a\+\)\<font color="#ff00ff"><b>(</b></font>.*@\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#a">a</a>
<font color="#00ffff"><b># After this second H command, we added to the hold space <word>\n@<signature></b></font>
<font color="#00ffff"><b># We'll remove the extra newlines later</b></font>
<font color="#ffff00"><b>H</b></font>
<font color="#8080ff"><b>$</b></font> <font color="#ff6060"><b>{</b></font>
<font color="#00ffff"><b># Append a final line feed to hold space, change \n@ to @</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>.*</b></font><font color="#ff6060"><b>/</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>H</b></font>
<font color="#ffff00"><b>g</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>\n@</b></font><font color="#ff6060"><b>/</b></font>@<font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>g</b></font>
<font color="#ffff00"><b>h</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#loop">loop</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="loop">loop</a></b></font>
<font color="#00ffff"><b># Search two words with the same signature and print them</b></font>
<font color="#00ffff"><b># \1 = first word</b></font>
<font color="#00ffff"><b># \2 = signature</b></font>
<font color="#00ffff"><b># \3 = anything in the middle (not backref'ed, needed for \?)</b></font>
<font color="#00ffff"><b># \4 = second word</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>^.*\n\<font color="#ff00ff"><b>(</b></font>[a-z]*\)@\<font color="#ff00ff"><b>(</b></font>[a-z]*\)\n\<font color="#ff00ff"><b>(</b></font>.*\n\)\?\<font color="#ff00ff"><b>(</b></font>[a-z]*\)@\2\n.*$</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\1</b></font> <font color="#00ff00"><b>\4</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>p</b></font>
<font color="#ffff00"><b>g</b></font>
<font color="#00ffff"><b># Remove the second of the two words with the same signature</b></font>
<font color="#00ffff"><b># so we'll print n-1 pairs instead of n(n-1)/2</b></font>
<font color="#00ffff"><b># \1 = anything before</b></font>
<font color="#00ffff"><b># \2 = first word @ signature</b></font>
<font color="#00ffff"><b># \3 = signature</b></font>
<font color="#00ffff"><b># \4 = anything in the middle (not backref'ed, needed for \?)</b></font>
<font color="#00ffff"><b># \5 = anything after</b></font>
<font color="#00ffff"><b>#</b></font>
<font color="#00ffff"><b># We need to use \1 and \5 to make sure we remove exactly the same</b></font>
<font color="#00ffff"><b># pair that we printed above</b></font>
<font color="#ffff00"><b>s</b></font><font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>^\<font color="#ff00ff"><b>(</b></font>.*\)\<font color="#ff00ff"><b>(</b></font>\n[a-z]*@\<font color="#ff00ff"><b>(</b></font>[a-z]*\)\n\)\<font color="#ff00ff"><b>(</b></font>.*\n\)\?[a-z]*@\3\n\<font color="#ff00ff"><b>(</b></font>.*\)$</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\1</b></font><font color="#00ff00"><b>\2</b></font><font color="#00ff00"><b>\4</b></font><font color="#00ff00"><b>\5</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>h</b></font>
<font color="#00ffff"><b># Look for another anagram if we did find one</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#loop">loop</a>
<font color="#ff6060"><b>}</b></font>
<font color="#00ffff"><b>### colorized by <a href="https://aurelio.net/projects/sedsed/">sedsed</a>, a debugger and code formatter for sed scripts</b></font>
</pre></body></html>
|