\section{Suchen und Ersetzen}
\index{Suchen}
\index{Ersetzen}
Eine  besondere  St�rke  von  \sevenup\ ist das Suchen und Ersetzen von
Textstellen.  \sevenup\  verf�gt  dazu  �ber leistungsf�hige Funktionen
aus der UNIX*-Welt, die einer genaueren Beschreibung bed�rfen.

�ffnen Sie das Men� {\bf `Suchen/Ersetzen... \ctrl{F}'}.
In  den  ersten  beiden  Eingabefeldern  wird der String nach dem
gesucht  werden  soll,  sowie  der  eventuelle Ersatz eingegeben.
Welcher  Suchmodus  benutzt  wird,  h�ngt  von  der  Stellung der
Schalter  (Runde  Kn�pfe) ab. Diese Radiobuttons genannten Kn�pfe
lassen  sich  nur wahlweise bet�tigen. Die anderen `ankreuzbaren'
K�stchen  k�nnen  Sie  fast  nach  Belieben zus�tzlich ankli"cken,
falls  sie  nicht  gesperrt  sind.  Die  K�stchen erscheinen dann
optisch schw�cher, `DISABLED'.
\begin{draw}{195.6}{103.4}{Dialog: {\bf `Suchen/Ersetzen'}}
\put(0.00,0.00){\special{CS!g 0.35 bilder/suchen.img}}
\end{draw}
Wenn  ein  Block  markiert  ist,  so interpretiert \sevenup\, ob
ein zu suchender Ausdruck markiert ist, oder ob im Block  gesucht
werden  soll.  Ist  der Block mehrere Zeilen lang ist, so wird er
als   Suchbereich   interpretiert,  ist  es  nur  ein  Wort  oder
h�chstens  eine  Zeile,  so mu"s es der zu suchende Ausdruck sein.
Sie  erkennen  das daran, da"s das K�stchen {\bf `im Block'} evtl.
schon markiert ist, wenn Sie das Men� �ffnen.

\sevenup\ verf�gt �ber drei Suchmodi:
\begin{enumerate}
\item Suchen ohne Wildcards.
\item Suchen mit DOS-Wildcards (MATCH).
\item Suchen mit regul�ren Ausdr�cken (GREP).
\end{enumerate}

\subsection{Suchen ohne Wildcards}
\index{Suchen}
Beim Suchen ohne Wildcards gibt es keine Platzhalter,
hier  mu"s das Suchmuster wie gewohnt exakt passen. Sie haben die
M�glichkeit  ab  der aktuellen Cursorposition, ab Textanfang oder
im   markiertem   Block   zu   suchen   bzw.   zu  ersetzen.  Die
Einstellungen  werden  mit den ankreuzbaren K�stchen vorgenommen.
Wenn  eine  bestimmte  Kombination  nicht m�glich ist, werden die
entsprechenden  K�stchen  `DISABLED',  man  kann  Sie  also nicht
bet�tigen.

\subsection{Suchen mit DOS-Wildcards (MATCH)}
\index{Match}
Diese Funktion  wird  vor  allen  Dingen MSDOS* Anwendern bekannt
vorkommen,  denn  es  wird  hier  mit Wildcards, vorzugsweise `*'
und  `?',  gesucht.  Nehmen wir an, Sie haben eine St�ckliste mit
Artikelnummern   vor   sich,   und   m�chten   nun  alle  Nummern
heraussuchen,  die  f�r  eine  bestimmte  Bauteilegruppe  typisch
sind  z.B.: `99XXX450', wobei  XXX  f�r  drei  beliebige  Ziffern
steht. Man gibt daher als Suchmuster `99???450' ein. Die Wildcards
sind  also  `?'  f�r  ein beliebiges Zeichen und `*' f�r beliebig
viele Zeichen (auch null!). Wenn sie nun ausgerechnet nach `*' oder `?'
suchen  wollen,  m�ssen  Sie  die  Wildcards  �ndern. Dabei gilt,
da"s  die  Quantoren selbst in den zu suchenden Textstellen nicht
vorkommen  d�rfen.  Noch ein Beispiel: `ei*e' findet `Zeile' aber
auch  `Meier'.  Wenn  zwischen `i' und `e' mindestens ein Zeichen
stehen soll, so erweitern Sie das Muster auf `ei?*e'.
\begin{quote}
{\bf Die  Hochkommata  vor  und  hinter den Beispielen werden
selbstverst�ndlich   nicht   eingegeben,   sie   dienen  nur  der
Kenntlichmachung innerhalb dieser Dokumentation.}
\end{quote}

\subsection{Suchen mit regul�ren Ausdr�cken (GREP)}
\index{Regul�re Ausdr�cke}
\index{GREP}
\index{Wildcard}
(Get Regular ExPression, Regul�rer Ausdruck). GREP sucht nach
Mus\-tern im Text, deren genaue Zusammensetzung nicht bekannt ist,
aber bestimmten Regeln gehorcht.
Regul�re Ausdr�cke sind Kombinationen von normalen Zeichen und Wildcards.
Wildcards stehen dabei nicht f�r das Zeichen selbst, sondern f�r ein
beliebiges Zeichen.
Die Wildcard ist der Punkt `.'. Er steht f�r genau ein beliebiges Zeichen.
Der Stern `*' gibt an, da� dieses Zeichen nullmal bis beliebig oft auftreten
darf (`.*'). Das Plus `+' gibt an, da� es mindestens einmal bis
beliebig oft auftreten darf (`.+'). Wenn das Zeichen aber nur in einem
eingeschr�nkten Bereich auftreten darf, verwendet man den
Klammerausdruck mit Bereichsangabe; `[\ ]'. `[A-Z]' sagt, da� das Zeichen
nur im Bereich `A-Z' auftreten darf. Ebenso gilt auch `[a-z]', `[0-9]'
oder auch `[a-g,H-M,0-4]'. Wenn ein Zeichen in einem bestimmten
Bereich {\bf nicht} auftreten soll, so wird das Caret `\ctrl{}'
vorangestellt (`[\ctrl{A-E}]').
Wenn die Wildcard selbst im Text als Zeichen erkannt werden soll,
so mu� sie quotiert werden.
Quotieren bedeutet das Voranstellen eines Backslashes `$\backslash$'
vor das Sonderzeichen. Wenn Sie also den Punkt selbst suchen wollen, so
lautet der Ausdruck `$\backslash$.'.

Beispiel:\\
In einem Text sollen die Worte `Qualle', `Quelle' und `Qu�lgeist'
gefunden  werden.  Das  Suchmuster  m�"ste also `[Q]u.[l]' lauten.
Der  Inhalt  der  eckigen  Klammern  steht  dabei  f�r  genau ein
Zeichen,  das  in  diesem  Falle nur ein `Q' und ein `l' an einer
beliebigen  Stelle hinter dem `Q' sein darf. Hinter dem `Q' steht
`u.'. Der Punkt steht dabei f�r ein beliebiges Zeichen.
Die  o.g.  Worte  erf�llen  das Suchmuster. Es kommen `Q' und `l'
vor,  dazwischen  stehen  in diesem Falle unterschiedlichen
Buch\-staben\-kom\-bina\-tionen, hier `ua', `ue' und `u�'.

Ein zweites Beispiel:\\
Sie  m�chten  in  Ihrem  Text  alle `/' finden, denen eine Ziffer
voransteht,  und  denen  ein  Buchstabe  folgt. also z.B. `22/BR'
nicht  aber  `138/0.5'. Das Suchmuster lautet dann `[0-9]/[a-z]'.
Vor  dem  `/'  sind  nur  Ziffern,  hinter dem `/' nur Buchstaben
erlaubt. Als zweite L�sung bietet sich `:d/:a' an. Erkl�rung s.u.

Ein drittes Beispiel:\\
Es  sollen  alle  Worte  gefunden  werden,  die  mit einer Ziffer
beginnen. Also z.B. `7UP'. Da  davor ein Leerzeichen erwartet
wird, lautet das Suchmuster dann `: [0-9]'.

Viertes Beispiel:\\
Es  sollen  alle  Interpunktionen  am Zeilenende gefunden werden.
z.B. Satzendekennung `.'. Geben Sie `$\backslash$.\$' ein. Bedenken Sie,
da"s  der  `.'  ein Sonderzeichen ist und quotiert werden mu"s.
Das `\$'-Zeichen  steht  f�r das Zeilenende, und mu"s nat�rlich
auch am Ende des regul�ren Ausdrucks stehen.   Wenn   Sie   alle
Interpunktionen   am   Zeilenende   finden   wollen,   geben  Sie
`[,;.:!?]\$' ein. (Dies ist tats�chlich kein COMIC-Schimpfwort!)
\index{quotieren}
\\
Wie beim Suchen, so ist auch beim Ersetzen der Einsatz von Wildcards
m�glich. Als Wildcard wird beim Ersetzen mit regul�ren Ausdr�cken
`$\backslash$\&' akzeptiert.
Diese beiden Zeichen werden beim Ersetzen durch das Gefundene ersetzt.
Damit ist es m�glich variable Fundstellen durch sich selbst und zus�tzliche
Zeichenketten davor oder dahinter zu ersetzen.
Beispiel:\\
Suchen     : `$\backslash$[.*OK.*$\backslash$]'\\
Ersatz     : `!$\backslash$\&!'\\
Fundstellen: `[OK]', `[ OK ]', `[xxOK   hh]'\\
Ergibt     : `![OK]!', `![ OK ]!', `![xxOK   hh]!'\\

\begin{quote}
{\bf Die  Hochkommata  vor  und  hinter den Beispielen werden
selbstverst�ndlich   nicht   eingegeben,   sie   dienen  nur  der
Kenntlichmachung innerhalb dieser Dokumentation.}
\end{quote}

Der  Regul�re  Ausdruck  beschreibt  das  zu suchende Muster. Die
Such\-m�g\-lich\-kei\-ten  entsprechen  aus technischen Gr�nden nicht dem
vollen Leistungsumfang des UNIX*-Programms GREP.

Die folgende Tabelle beinhaltet eine Aufstellung derjenigen Sonderzeichen,
mit denen eine recht pr�zise Formulierung der Suchkriterien m�glich ist:

\begin{center}
\begin{tabular}{|c|p{9.2cm}|}\hline
{\bf Regel} & {\bf Erkl�rung}\\ \hline\hline
`.'            &  Der Punkt steht f�r ein beliebiges Zeichen.\\ \hline

`\ctrl{}'      &  Das  Caret  steht  f�r  den  Zeilenanfang  (implementiert,
                  aber  nicht   funktionsf�hig;  mu"s  aber  gequotet werden,
                  wenn es im Text als Zeichen stehend gefunden werden soll).\\ \hline

`\$'           &  Das Dollarzeichen steht f�r das Zeilenende.\\ \hline

`$\backslash$' &  Der Backslash quotiert jedes Sonderzeichen. Um den Punkt
                  selbst darstellen zu k�nnen, schreiben Sie `$\backslash$.';
                  ebenso `$\backslash\backslash$', `$\backslash$\ctrl{}', `$\backslash$\$'.
                  Sonderzeichen  m�ssen  grunds�tzlich quotiert werden.\\ \hline

`*'   &   Wenn  einem  Zeichen  ein `*' folgt, bedeutet das, da"s das
          letzte   Zeichen  garnicht  auftritt,  oder  sich beliebig
          oft  wiederholen  darf.   `fo*'  findet  `f', `fo', `foo',
          `fooo' usw.\\ \hline

`+'   &   Wie  `*',  jedoch mu"s das letzte Zeichen mindestens einmal
          auftreten.  `fo*' findet `fo', `foo', `fooo' usw.\\ \hline

`$-$' &   Das  Minuszeichen  dient  der Bereichsangabe innerhalb der
          Zeichenkette in eckigen Klammern.\\ \hline

`\&'  &   Symbolisiert den Textabschnitt, auf den das Suchmuster zutrifft.
          Kann im Ersatztext verwendet werden.\\ \hline

`[ ]' &   Eine Zeichenkette in eckigen Klammern steht f�r ein Zeichen.
          Welchen Wert dieses Zeichen haben darf, beschreibt der
          Klammerinhalt. Wenn das erste Zeichen
          ein   `\ctrl{}' ist,   sind  diese  Zeichen  von  der  Suche
          ausgeschlossen. Z.B.: {\bf [xyz]} besagt,da"s das Zeichen an dieser
          Stelle nur `x', `y', `z' sein darf. {\bf [\ctrl{}xyz]} sagt,
          da"s das Zeichen an dieser Stelle weder `x' noch `y' noch `z'
          sein darf.
          Ein  Zeichenbereich  kann  durch  `$-$'  angegeben  werden.
          Beachten Sie bitte, da"s {\bf [a-z]}  jedes  alphabetische
          Zeichen, aber {\bf [z-a]}  �berhaupt  kein  alphabetisches
          Zeichen findet. Ziffern  werden  mit {\bf [0-9]} angegeben.
          Dabei sind auch Einschr�nkungen  m�glich,  z.B. {\bf [7-9]}
          (also  nur  7,8,9).  Das gleiche gilt auch f�r Buchstaben,
          z.B. {\bf [m-z]}, oder {\bf [\ctrl{}a-bd-z?]} sucht nur Buchstabe `c',
          alle   Ziffern,   sowie    Sonderzeichen  au"ser  `?'. Die
          Reihenfolge  der  Zeichen  in  der  Klammer   spielt keine
          Rolle.

\end{tabular}
\end{center}

In   der   Hilfebox  k�nnen  Sie  diese  Sonderzeichen  und  ihre
Bedeutung  noch  einmal nachlesen, falls Sie sie gerade mal nicht
genau wissen sollten.
\begin{quote}
{\bf ANMERKUNG:}
Die  Sonderzeichen  werden  innerhalb  eines  Zeichensatzes nicht
gesondert  interpretiert; das Caret `\ctrl{}'  wird  nur dann als
Negation  gewertet,  wenn  es  direkt am Anfang des Zeichensatzes
steht  (also  direkt  hinter  dem  `[').  Das `\$' ist wird nur an
letzter  Stelle  stehend  richtig  bewertet. Das Caret `\ctrl{}' f�r den
Zeilenanfang ist  implementiert,  aber nicht funktionsf�hig, weil nach
einer  Fundstelle innerhalb einer Zeile noch weiter gesucht wird,
und   daher   der   GREP-Funktion  ein  neuer  Zeilenanfang
vorgegaukelt wird.
\end{quote}
Die   Verkn�pfung   von   Regul�ren  Ausdr�cken  ist  wieder  ein
Regul�rer Ausdruck.

Die   Suche  mit  regul�ren  Ausdr�cken  ist  nicht  trivial  und
erfordert  ein  gewisses  Ma"s  an  �bung.  Es kann auch sein, da"s
bestimmte  Ausdr�cke  nicht  gefunden  werden, weil man daf�r das
Suchmuster  nicht  formulieren  kann.  GREP  ist  also auch nicht
`allfindend'.

\subsection{Ersetzen}
\index{Ersetzen}
Hiermit   wird   die   gefundene   Textstelle  gegen  den  Ersatz
ausgetauscht.  Wenn  Sie  einmal  mehrere  Worte  auf diese Weise
l�schen  wollen,  so  geben  Sie  als  Ersatz einfach nichts ein,
also  einen  Leerstring.  Wenn  Sie  alles  aufeinmal austauschen
wollen, so w�hlen Sie den Knopf {\bf `alles'}.\\
Bei   der Einstellung {\bf `nachfragen'} wird vor jeder Ersetzung
nochmal nachgefragt,  ob  Sie damit einverstanden sind. Au"serdem
wird  in  einer  Dialogbox  der  Ersatzstring  angezeigt und kann
noch   individuell   ge�ndert   werden.   Sie  k�nnen  damit  die
Fundstelle durch verschiedene Texte ersetzen.
\begin{draw}{195.6}{49.8}{Dialog: {\bf `Ersetzen'}}
\put(0.00,0.00){\special{CS!g 0.35 bilder/ersetzen.img}}
\end{draw}

