File: sodelnum.gnu.sed.html

package info (click to toggle)
sedsed 2.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 4,008 kB
  • sloc: sed: 37,239; ansic: 2,395; python: 815; sh: 624; makefile: 95
file content (74 lines) | stat: -rw-r--r-- 6,551 bytes parent folder | download | duplicates (2)
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
<html>
<head><meta name="Generator" content="sedsed --htmlize">
<title>Colorized sodelnum.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>#----------------- gather the lines in hold space</b></font>

<font color="#ffff00"><b>H</b></font>
<font color="#8080ff"><b>$</b></font> <font color="#ff6060"><b>!</b></font><font color="#ffff00"><b>b</b></font> 

<font color="#00ffff"><b>#----------------- sort them</b></font>

<font color="#00ffff"><b># Append a new-line and the look-up table to hold space, get everything</b></font>
<font color="#00ffff"><b># in pattern space</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="#00ff00"><b>&amp;</b></font>'()*+,-.\/0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~<font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>H</b></font>
<font color="#ffff00"><b>g</b></font>

<font color="#ffff00"><b>t</b></font> <a href="#sort">sort</a>
<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="sort">sort</a></b></font>
<font color="#00ffff"><b># This regexp performs an insertion sort pass!!!</b></font>
<font color="#00ffff"><b># It searches for two lines with a common (possibly empty) prefix and</b></font>
<font color="#00ffff"><b># compares the first differing char using a lookup table -- if the</b></font>
<font color="#00ffff"><b># order is wrong, the regexp matches and the RHS of the s command</b></font>
<font color="#00ffff"><b># swaps the lines</b></font>
<font color="#00ffff"><b>#</b></font>
<font color="#00ffff"><b># \1 = line after the one to be inserted</b></font>
<font color="#00ffff"><b># \2 = common part to the two lines     </b></font>
<font color="#00ffff"><b># \3 = first differing char (in \1)     </b></font>
<font color="#00ffff"><b># \4 = lines between the two lines      </b></font>
<font color="#00ffff"><b># \5 = line to be inserted              </b></font>
<font color="#00ffff"><b># \6 = first differing char (in \5)     </b></font>
<font color="#00ffff"><b># \7 = lines after the second line + the lookup table</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>[ -~]*\)\<font color="#ff00ff"><b>(</b></font>[ -~]\)[ -~]*\)\<font color="#ff00ff"><b>(</b></font>\n.*\)\?\<font color="#ff00ff"><b>(</b></font>\n\2\<font color="#ff00ff"><b>(</b></font>[ -~]\)[ -~]*\)\<font color="#ff00ff"><b>(</b></font>\n.*°.*\6.*\3\)</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\5</b></font><font color="#00ff00"><b>\1</b></font><font color="#00ff00"><b>\4</b></font><font color="#00ff00"><b>\7</b></font><font color="#ff6060"><b>/</b></font>
<font color="#00ffff"><b>#   1----------------------------  4---      5------------------    7------------</b></font>
<font color="#00ffff"><b>#       2-----    3----                            6----</b></font>
<font color="#ffff00"><b>t</b></font> <a href="#sort">sort</a>

<font color="#00ffff"><b># Remove the last new-line and the lookup table</b></font>
<font color="#00ffff"><b># Leave the leading new-line</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°.*$</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\1</b></font><font color="#ff6060"><b>/</b></font>

<font color="#00ffff"><b># ----------------- delimit and number them</b></font>

<font color="#ff00ff"><b>:</b></font><font color="#ff00ff"><b><a name="number">number</a></b></font>

<font color="#00ffff"><b># Remove the first line, move the last number to the beginning of the</b></font>
<font color="#00ffff"><b># new first line together with the lookup table</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>[0-9]*\)[ -~]*\n</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\1</b></font>;9876543210990090 <font color="#ff6060"><b>/</b></font>

<font color="#00ffff"><b># This regexp does the incrementing -- see tutorials for its explanation</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>[0-8]\{0,1\}\)\<font color="#ff00ff"><b>(</b></font>9*\);[^1]*\<font color="#ff00ff"><b>(</b></font>.\)\1[0-9]*X*\2\<font color="#ff00ff"><b>(</b></font>0*\)[^ ]*</b></font><font color="#ff6060"><b>/</b></font><font color="#00ff00"><b>\3</b></font><font color="#00ff00"><b>\4</b></font><font color="#ff6060"><b>/</b></font>
<font color="#ffff00"><b>P</b></font>

<font color="#00ffff"><b># If the first char changes, we replace the first line with</b></font>
<font color="#00ffff"><b># a single new-line character.  The pattern space will look the</b></font>
<font color="#00ffff"><b># same as when we leave the sorting section, and the counter</b></font>
<font color="#00ffff"><b># will be restarted.</b></font>
<font color="#00ffff"><b># The leading new-line is printed by the second line, which</b></font>
<font color="#00ffff"><b># can only match if the first did (if it didn't, the first </b></font>
<font color="#00ffff"><b># character will still be a digit).</b></font>
<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>^[0-9]* \<font color="#ff00ff"><b>(</b></font>.\).*\n\1</b></font><font color="#ff6060"><b>/</b></font> <font color="#ff6060"><b>!</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="#ff6060"><b>/</b></font><font color="#8080ff"><b>^\n</b></font><font color="#ff6060"><b>/</b></font> <font color="#ffff00"><b>P</b></font>

<font color="#ff6060"><b>/</b></font><font color="#8080ff"><b>.</b></font><font color="#ff6060"><b>/</b></font> <font color="#ffff00"><b>b</b></font> <a href="#number">number</a>

<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>