File: text-tools.tex

package info (click to toggle)
doc-linux-nl 20051127-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 16,408 kB
  • ctags: 94
  • sloc: xml: 47,403; makefile: 312; perl: 193; sh: 116; ansic: 12; csh: 9
file content (489 lines) | stat: -rw-r--r-- 19,221 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
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
\newpage
\chapter{Tekstbewerkingshulpmiddelen}

\section{Vi}
Alhoewel \program{vi} wordt aangemerkt als \"e\"en van de meest
primitieve editors onder Linux, is het nog steeds een van de
meest gebruikte Unix editors.
Je zal moeten weten hoe je \program{vi} gebruikt als je
favoriete editor niet beschikbaar is.

\program{vi} heeft 2 basismodi: Opdrachtmodus en Invoegmodus.
Als eerste zullen we beginnen aan ons project te werken.
Basisfuncties in opdrachtmodus worden hieronder weergegeven. 
Degenen met een asteriks ernaast zijn opdrachten waarmee je in
de invoegmodus komt.

{\renewcommand{\baselinestretch}{.6}
\begin{table}[ht!]
\begin{center}
\begin{tabular}{|c c l|}
\hline
toets  & Voeg in  & Beschrijving\\
\thickhline
   A   & * &  Toevoegen na deze regel   \\
   a   & * &  Toevoegen na dit teken   \\
   C   & * &  Vervangen tot aan het einde van de regel    \cr
   cw  & * &  Vervang dit woord            \cr
   i   & * &  Invoegen (begin hier te typen)    \cr
   O   & * &  Begin een regel boven de cursor \cr
   o   & * &  Begin een regel onder de cursor \\
   R   & * &  Overschrijfmodus                \cr
   j   &   &  Verplaats cursor een regel naar beneden \cr
   k   &   &  Verplaats cursor een regel naar boven       \cr 
   l   &   &  Verplaats cursor een teken naar rechts    \cr
   h   &   &  Verplaats cursor een teken naar links     \cr
   x   &   &  Verwijder teken              \cr
   w   &   &  Verplaats een woord voorwaarts         \cr
   b   &   &  Ga een woord terug            \cr
   D   &   &  Verwijder tot einde regel     \cr
   dw  &   &  Verwijder dit woord           \cr
   dd  &   &  Verwijder deze regel          \cr
   d4w &   &  Verwijder 4 woorden           \cr
   yy  &   &  Kopieer een regel naar de buffer   \cr
   p   &   &  Voeg inhoud buffer in na regel \cr
   P   &   &  Voeg inhoud buffer in voor deze regel \cr
 \lt{}esc\gt&&Ga uit insert modus             \cr
\hline
\end{tabular}
\caption{\program{vi} Bewerkingen in opdrachtmodus}
\end{center}
\end{table}}


\newpage
Vanuit pneumatisch oogpunt kan het zijn dat deze opdrachten niet zo
vanzelfsprekend zijn, maar ze werden ontworpen vanwege de eenvoud en
toetsenbordefficientie.

Je kunt bestanden in opdrachtmodus lezen en schrijven door gebruik te
maken van de \program{ex}
modus die wordt aangeroepen door het intikken van een \program{:} 
(die je onderaan het \program{vi} scherm een aanwijzing zal geven)

\begin{alltt}
  :w         Schrijf dit bestand weg.
  :q         Ga uit \program{vi} zonder opslaan.
  :q!        Forceer uit \program{vi} gaan zonder opslaan.
  :w!        Forceer wegschrijven.
  :wq        Sla dit bestand op EN ga uit \program{vi}.
  :r bestand Lees ``bestand'' in op de plaats van de cursor.
\end{alltt}

Zoek-, vervang- en uitvoeropdrachten worden op vergelijkbare wijze uitgevoerd:

\begin{samepage}
\begin{alltt}
  /pattern               \comment{Zoek naar ``pattern'' en verplaats de cursor
daar naartoe}
  :1,100 s/blue/green/g  \comment{Vervang op regel 1 tot 100, blauw door groen}
  :1,\$   s/blue/green/g  \comment{Vervang op alle regels blauw door groen}
  :'a,'b s/taart/cake/g    \comment{Vervang vanaf de markering ``a'' tot aan de markering ``b'', taart door cake}
  :1,\$   !sort           \comment{\program{sorteer} alle regels}
\end{alltt}
\end{samepage}

\begin{samepage}
Zodra we eenmaal bekend zijn met \program{vi} zullen we deze modi verder
bespreken. Als eerste starten we de editor door het intikken van:

\begin{alltt}
  \bash{vi invoer.txt}
\end{alltt}

Als het goed is heb je nu een leeg scherm voor je dat er ongeveer zo uit ziet

\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
\fim
~
~
~
\end{Verbatim}

\end{samepage}

% \colorbox{black}{\color{white} Zoals dit}

Typ nu \program{i} en begin met het intikken van enige betekenisvolle tekst,
zoals

\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
Marie had een klein lammetje, wiens pootjes zo wit waren als sneeuw.
~<esc>
~
~
\end{Verbatim} 

\begin{samepage}
De \program{i} plaatst je in invoegmodus, en de laatste
\program{\lt{}esc\gt} plaatst je terug in opdrachtmodus. Schrijf het
nu weg en ga er uit met \command{:wq}.

\begin{Verbatim}[fontfamily=courier,frame=single,commandchars=\\\{\}]
Marie had een klein lammetje, wiens pootjes zo wit waren als sneeuw.
~
~
~
~
\rv{"invoer.txt" 1 line, 58 characters written}
\end{Verbatim}
\end{samepage}

\section{Editen met \program{Pico}}
\program{Pico} is verreweg de eenvoudigste editor in het gebruik aangezien
het gewoonijk zijn opdrachten onderaan het scherm afbeeldt.
Begin door het intikken van \program{pico invoer.txt}:


\begin{alltt}
\rv{   UW PICO(tm) 3.5                File: invoer.txt                         }
\vskip4pt{}Marie had een klein lammetje, wiens pootjes zo wit waren als sneeuw...
Start xxx Regulier
   bar baz foo them@nowhere.com Regulier
Linux Rocks TurboLinux eats apples Respect
Some say Linux Rocks

\rv{^G}Get Help \rv{^O}WriteOut \rv{^R}Read File \rv{^Y}Prev Pg \rv{^K}Cut Text \rv{^C}Cur Pos
\rv{^X}Exit     \rv{^J}Justify  \rv{^W}Where is  \rv{^V}Next Pg \rv{^U}UnCut    \rv{^T}To Spell
\rule[0cm]{6.4truein}{4pt} 
\end{alltt}

Het enige probleem dat zich voordoet met \program{pico} (en andere niet-vi
editors) is dat het zich in een noodsituatie wellicht niet op je systeem
bevindt, juist wanneer je het 't hardste nodig hebt.
Druk op {\large\tt{\verb|^X|}} om  uit \program{pico} te gaan.

\newpage
\section{Editen met \program{Emacs}}
\program{Emacs} is de krachtigste van alle gewoonlijk in het gebruik
zijnde editors onder Linux. De \term{X-Window} versie wordt volledig met
alle soorten menu-opties en panels geladen. Ondanks zijn complexiteit, kun
je er met een handjevol opdrachten mee overweg.

\heading{Emacs beeindigen en bestandsmanipulatie}
\key{{\bf schrijf} een bestand weg naar disk}{C-x C-s}
\key{sla {\bf alle} bestanden op}{C-x s}
\key{beeindig Emacs permanent}{C-x C-c}
\key{{\bf lees} een bestand in in Emacs}{C-x C-f}
\key{{\bf voeg} de inhoud van een ander bestand in in deze buffer}{C-x i}
\key{schort Emacs tijdelijk op (of verklein het onder X)}{C-z}
\key{ga naar het begin van de regel}{C-a}
\key{ga naar het einde van de regel}{C-e}
\key{verwijder teken}{C-d}
\key{verwijder tot einde van regel}{C-k}
\key{verwijder en buffer tekst}{C-w}
\key{stel een markering in}{C-space}
\key{plak inhoud uit buffer}{C-y}

\heading{Emacs foutherstel en zoeken}
\key{{\bf ongedaan} maken van een ongewilde wijziging}{C-x u}
\key{{\bf afbreken} van deels getypte of uit te voeren opdracht}{C-g}
\key{herschrijf rommelig scherm}{C-l}
\key{zoek voorwaarts}{C-s}
\key{zoek achterwaarts}{C-r}
\key{reguliere expressie zoeken}{C-M-s}
\key{achterwaarts reguliere expressie zoeken}{C-M-r}

\heading{Emacs opmaak}
\key{spring huidige {\bf regel} in (modus-afhankelijk)}{TAB}
\key{inspringen {\bf region} (modus-afhankelijk)}{C-M-\\}
\key{inspringen {\bf sexp} (modus-afhankelijk)}{C-M-q}
\key{gebied inspringen {\it arg\/} kolommen}{C-x TAB}

\heading{Emacs Help}
\key{basishulp }{C-h}
\key{scroll help window}{C-M-v}
\key{Emacs Tutorial}{C-h t}
\key{apropos: toon opdrachten die overeenkomen met een string}{C-h a}
\key{toon de functie van een toets}{C-h c}
\key{beschrijf een functie}{C-h f}

\section{Mail gebruiken}
Linux wordt met verscheidene mailafhandelingsprogramma's geleverd. 
Ik geef de voorkeur aan
\program{elm} omdat ik het goed ken en het krachtig is, alhoewel \program{pine}
erg gebruiksvriendelijk en eenvoudig in het gebruik is.
We zullen beiden bespreken.

\subsection{Elm}
Start elm op door het intikken van ``\program{elm}''. 
Als het voor de eerste keer wordt opgestart, zal het je een aantal
vragen stellen over bestanden, bevestig gewoon alles met yes.

{\normalsize
\begin{Verbatim}[fontfamily=ttfamily,frame=single,commandchars=\\\{\}]
      Mailbox is '/var/spool/mail/carinhas' with 2 messages [ELM 2.5 PL1]

     1   Jan 12 * Mail Delivery Subs (61)   Returned mail: Host unknown 
\rv{    2   Jan 12 * Mail Delivery Subs (62)   Returned mail: Host unknown}

         \pipe=pipe, !=shell, ?=help, \lt{}n\gt=set current to n, /=search pattern
  a)lias, C)opy, c)hange folder, d)elete, e)dit, f)orward, g)roup reply, m)ail,
    n)ext, o)ptions, p)rint, q)uit, r)eply, s)ave, t)ag, u)ndelete, or e(x)it

Command:q
\end{Verbatim}
}
\vskip-3pt
Eenmaal binnen \program{elm}, tik je achter de opdrachtprompt de ``m'' in, 
en volgt de aanwijzingen. \program{elm} is meer opdrachtgestuurd en op 
Unix-lijkend. Bij twijfel tik je gewoon de ``q'' in om eruit te gaan. 
Gebruik de pijltjestoetsen om omhoog en omlaag te gaan door de lijst 
met berichten.

\vspace{-4pt}
\subsection{Pine}
\program{Pine} is makkelijker te leren en gebruiken, en is compatibel met
\program{elm}, dus je kunt ze uitwisselbaar gebruiken.
Gebruik de cursorpijl naar boven, naar beneden, en \lt en \gt\ pijlen 
om te navigeren.

{\normalsize
\begin{Verbatim}[frame=single,commandchars=\\\{\}]
\rv{PINE 4.10   MAIN MENU                              Folder: INBOX  2 Messages   }

          ?     HELP               -  Get help using Pine    
          C     COMPOSE MESSAGE    -  Compose and send a message      
          I     MESSAGE INDEX      -  View messages in current folder 
         \rv{\hspace{2truept}L     FOLDER LIST        -  Select a folder to view        }
          A     ADDRESS BOOK       -  Update address book             
          S     SETUP              -  Configure Pine Options          
          Q     QUIT               -  Leave the Pine program          

\rv{?} Help\hspace{1truept}                      \rv{P} PrevCmd\hspace{10pt}                \rv{R} RelNotes
\rv{O} OTHER CMDS \rv{\gt} [ListFldrs] \rv{N} NextCmd                  \rv{K} KBLock
\end{Verbatim}
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Reguliere Expressies}

Reguliere expressies vormen een van de pilaren van Unix duisternis in
tekstverwerking.
Reguliere expressies zijn zoekmaskers die je een onheilspellende besturing geven
over hoe testkpatronen zijn te vinden.
Hier zijn de basis patroonovereenkomstsymbolen:

{\normalsize
\begin{alltt}
.      Komt met alles overeen. ``.*'' komt met alles elk willekeurig aantal
       keren overeen. Zie *
*      Komt overeen met het laatste teken of exp 0 of meer keren. a* komt
       overeen met (), a, aa, aaa, 
+      Komt overeen met het laatste teken of exp 1 of meer keer. a+ komt
       overeen met a, aa, aaa, ..
?      Komt overeen met het laatste teken of exp 0 of 1 keer. a? komt 
       overeen met (), a
{\Large^}  Komt overeen met het begin van de regel. 
^abc   komt overeen met regels die beginnen met abc.
\$     Komt overeen met het einde van een regel.
^\$    Komt overeen met lege regels.
[]     Komt overeen met tekens binnen de haken. 
       [abc] kan overeenkomen met a, b, of c.
[^]    Het tegenovergestelde van vorige opdracht: 
       [^abc] komt met alles overeen behalve a, b, of c.
()     Tekengroepering. (abc)+ komt overeen met abc, abcabc, abcabcabc, ....   
\bs{}  Komt overeen met regex tekens, zoals \bs{+}, \bs{*}, en \bs{^}.
\{n\}  Het voorgaande item wordt exact n keer vergeleken.
\{n,\} Het voorgaande item wordt n of meer keren vergeleken.
\{,m\}  Het voorgaande item is optioneel en wordt maximaal m keer vergeleken.
\{n,m\} Het voorgaande tekens wordt minstens n keer vergeleken, niet meer
        dan m keer.
\bs{b}  Komt overeen met een woordgrens: abc\bs{b} komt overeen met 
        {\bf abc} maar niet met abcd.
\bs{B}  Komt overeen met een niet woordgrens:  abc\bs{B} komt overeen met
        {\bf abc}d maar niet met abc.
\bs{w}  Komt overeen met een woord: abc\bs{w} komt overeen met {\bf abcdef},
        maar niet met abc@.
\bs{W}  Komt overeen met een onbegrensd woord: abc\bs{W} komt overeen met
        {\bf abc(!)} maar niet met abc.
\end{alltt}
}

\subsection{GREP}
\program{grep} is een hulpmiddel om te zoeken naar patronen. 
Het zoekt naar patronen in een bestand en zal ze wanneer ze zijn gevonden op
de terminal afdrukken. Deze patronen bestaan tevens uit 
\term{reguliere expressies}.
Test \program{grep} als voorheen met het bestand \file{}.

\begin{alltt}
\command{grep}\option{ [ opties ] patroon bestand.. }
\end{alltt}

{\normalsize
\begin{alltt}
   # 1. Zoek overal in het bestand naar regels waarin ``Linux'' voorkomt.
   grep Linux invoer.txt

   # 2. Zoek naar ``Linux'' in een onbegrensd woord, zoals ``TurboLinux''
   grep ``\bs{B}Linux'' invoer.txt    # Herinner je \bs{B}?

   # 3. Zoek aan het begin en einde van een regel naar ``Linux'', reguliere
        expressies.
   grep 'Linux\$' invoer.txt       # Let op de enkele aanhalingstekens om
                                   # de shell om de tuin te leiden,
   grep ^Linux invoer.txt          # omdat de shell probeert zaken als \$
                                   # te interpreteren.

   # 4. Regels beginnend met ``Linux'', eindigend op ``Respect''.
   grep '^Linux.*Respect\$' invoer.txt  #  ``.*'' betekent elk aantal van wat dan ook.

   # 5. Zoek naar lastige patronen:
    grep '<.*>' invoer.txt       # Zoek naar regel met ``<iets>''. Html tags?
\end{alltt}
}
        
\newpage
\subsection{AWK}

\program{Awk} is een patroonscanning en verwerkingstaal. De
syntax ervan luidt:

\begin{alltt}
\command{awk}\option{ 'programma' invoer-bestanden}
\end{alltt}

Wanneer het een lang programma is, is het gewoonlijk handiger dit in een bestand
te plaatsen en het als volgt als een opdracht uit te voeren:

\begin{alltt}
\command{awk}\option{ -f programmabestand invoerbestanden}
\end{alltt}

Neem nu een kijkje in de handleiding (man page). Hier zijn een aantal
\"e\"enregelige voorbeelden:

{\normalsize
\begin{Verbatim}[fontfamily=courier,commandchars=\\\{\}]
\command{awk '/xxx/' invoer.txt}  # Zoek naar ``xxx'' in \term{invoer.txt} 
    Vrijwel alle reguliere expressies werken binnen de //.
\command{awk 'NF > 0' invoer.txt} 
    Dit programma drukt elke regel af dat uit tenminste 1 veld bestaat. Het
is een makkelijke manier om lege regels uit een bestand te verwijderen.
\command{awk -F: '\{ print \$1 \}' /etc/passwd | sort }
    Dit programma drukt een gesorteerde lijst van de loginnamen van alle
gebruikers af.
\command{awk 'END \{ print NR \}' invoer.txt }
    Dit programma telt het aantal regels in invoer.txt
\command{awk 'NR % 2 == 0' invoer.txt} 
    Dit programma drukt de even genummerde regels van invoer.txt af.
    Als je de expressie `NR % 2 == 1' zou hebben gebruikt, zouden er oneven
genummerde regels zijn afgedrukt.
\command{awk '\{if (length(\$0) > max) max=length(\$0)\} END \{print max\}' invoer.txt}
    Dit programma drukt de lengte van de langste invoerregel af.
\command{awk 'length(\$0) > 80' invoer.txt} # Druk de regels af die uit meer dan
80 tekens bestaan.
Aangezien de enkele regel een relationele expressie als patroon heeft en
geen actie, worddt de standaardactie, het afdrukken van het record gebruikt.
\command{awk 'BEGIN \{ for (i = 1; i <= 7; i++) print int(101 * rand()) \}'} 
    Dit programma drukt zeven willekeurige nummers af van 0 tot en met 100.
\command{ls -lg *.txt | awk '\{ x += \$5 \} ; END \{print "total bytes:" x \}'}
    Dit programma drukt het totaal aantal bytes af door door alle .txt 
    bestanden in beslag wordt genomen.
\end{Verbatim}
}

\newpage
\subsection{Perl}
\program{Perl}, ``Practical Extraction and Report Language'' is de Swiss Army
Knife van alle scripttalen. Het heeft alles behalve een Megawatt laser, en 
een gootsteen.
Perl bevat een zeer complete set \term{reguliere expressies} en een grote
set Unix systeemaanroepen:

\begin{alltt}
\command{perl}\option{ [opties] [ programma ] }
\end{alltt}

Op de opdrachtregel kun je gebruik maken van de syntax
\begin{alltt}
\command{perl}\option{ -ne 'opdracht' bestand }
\end{alltt}

waarbij dit de opties zijn

\begin{alltt}
\dkey{-e 'command'}{voer een \term{opdracht} uit in plaats van een scriptbestand}
\dkey{-n}{voer het script uit op elke regel invoer \term{file}}
\dkey{-w}{Druk waarschuwingen af voor je script \term{file}}
\end{alltt}


Ook als is het nog zo complex, we kunnen een paar \"e\"enregelige
\program{perl} opdrachten leren waarmee wonderen kunnen worden verricht:

\begin{alltt}
   # 1. Zoek in \term{invoer.txt} naar regels beginnend met ``Linux Rocks''
   perl -ne 'if ( /^Linux Rocks/ ) \{print\} ' invoer.txt

   # 2. Zoek ``Linux'' in een onbegrensd woord, zoals ``TurboLinux''
   perl -ne 'if ( /\bs{B}Linux/ ) \{print\} ' invoer.txt

   # 3. Zoek naar ``Linux Rocks'' en vervang het door ``Rocks Linux''.
   #    Reguliere expressies matching ()'s get named \$1, \$2, \$3, etc..
   perl -ne 's/^(Linux) (Rocks)/\$2 \$1/; { print} ' invoer.txt

   # 4. Regels beginnend met ``Linux'', eindigend op ``Rocks''.
   perl -ne 'print if /^Linux Rocks\$/ ' invoer.txt

   # 5. Zoek naar e-mailadressen in \term{invoer.txt}:
   perl -ne 'print if (/(\bs{w}[.\bs{w}]*\bs{@}\bs{w}[\bs{w}\.-]+\bs{w})/gm)' invoer.txt
        
\end{alltt}

\newpage
\subsection{SED}
\program{sed} is een stream editor, wat betekent dat het als een
transportband op je terminal werkt. De tekstbestanden passeren je
terwijl het zijn werk doet. 

\begin{alltt}
\command{sed}\optie{ [script ] bestand.. }
\end{alltt}

\program{sed} is aardig complex dus we zullen hier slechts wat simpele
gebruiken en voorbeelden laten zien...

\begin{alltt}
   # 1. Print van regel 1 tot en met 32 het regelnummer
   sed '1,32 \{= ; \}' invoer.txt   # Werkt vrijwel bijna als in \program{VI}

   # 2. Verwijder de regels 1 tot en met 32
   sed "1,32 d" invoer.txt        # \emph{:1,32 d} in \program{VI}

   # 3. Onder UNIX: converteer DOS newlines (CR/LF) naar Unix formaat
   sed 's/^M\$//' invoer.txt      # Onder bash ^M = C-v C-m, tcsh ^M = C-v C-j
        
   # 4. Onder DOS: converteer Unix newlines (LF) naar DOS formaat
   sed 's/\$//' invoer.txt        # methode 1
   sed -n p invoer.txt            # methode 2

   # 5. Verwijder van elke regel de witruimte (spaties/tabs) waarmee de regel
	begint.
   #    '^t' stelt een echt tab-teken voor. ^t => Ctrl-V Ctrl-I.
   sed 's/^[ ^t]*//' invoer.txt   # OK in \program{VI} zonder enkele 
                                  # aanhalingstekens.

   # 6. Verwijder van elke regel witruimte (spaties/tabs) aan het einde vd regel
   sed 's/[ ^t]*\$//' invoer.txt  # zie hierboven de opmerking over '^t'

   # 7. Verwijder op elke regel ZOWEL de voorafgaande als eindigende witruimte
   sed 's/^[ ^t]*//;s/[ ^t]*\$//' invoer.txt   # zie hierboven de opmerking over
'^t'

   # 8. Vervang "foo" door "bar"
   sed 's/foo/bar/' invoer.txt        # vervang 1e instance foo door bar.
   sed 's/foo/bar/4' invoer.txt       # vervang alleen 4e instance in een regel
   sed 's/foo/bar/g' invoer.txt       # vervang ALLe instances binnen een regel
   sed '/baz/s/foo/bar/g' invoer.txt  # Sub ALLEEN bij regels waarin "baz" voorkomt.
   
   # 9. Overeenkomst van regel waarin ``Regulier'' voorkomt:
   sed '/^Regulier/d' invoer.txt       # Verwijder regels beginnend met ``Regulier''
   sed '/Regulier\$/d' invoer.txt      # Verwijder regels eindigend op ``Regulier''

   #10. Vanaf ``Start'' tot ``Linux'', vervang appels door sinaasappels.
   sed  /Start/,/Linux/{s/appels/sinaasappels/} invoer.txt

\end{alltt}