GREP – Nicht nur für Programmierer

Seit InDesign CS3 kann man in InDesign mit Hilfe von GREP komplexe Suchen/Ersetzen-Routinen durchführen. Allerdings ist dieses Feature wohl den meisten Usern bisher etwas verborgen geblieben und wenn nicht, dann herrscht gerne schnell die Meinung: »Ach das ist nur was für Programmierer« oder »das ist mir viel zu kompliziert«.

Ich sage: GREP ist sehr sehr cool und mächtig :-) Es lohnt sich auf jeden Fall sich da etwas einzulesen, denn mit nur ein bisschen Wissen darum wie GREP funktioniert, kann man schon große Dinge erledigen und automatisieren. Im Folgenden deshalb ein paar einfache GREP-Beispiele damit man sieht was damit überhaupt möglich ist.

GREP – Wie bitte?

Was heißt GREP überhaupt? Es ist die Abkürzung für: Global Regular Expression Print. Adobe sagt es so:

Es handelt sich dabei um ein Werkzeug zur Textsuche, mit dem Sie anhand von regulären Ausdrücken, also einer Kombination bestimmter Zeichen, Variablen und Argumente, komplexe Textbestandteile wie Wörter oder Sätze aufspüren können.

Okay, das hört sich jetzt vielleicht kompliziert an, also doch lieber sofort mal ein Beispiel:

Datum-Bis-Striche ersetzen

Für dieses typische Problem gab es bisher nur eine Workaround-Lösung, bzw. eine die via Script erledigt werden kann (jene welche noch in einer Version vor CS3 unterwegs sind, hier das Skript).

grep_bisstriche

In diesem Beispiel sind links die Bis-Striche falsch. Es wurde das Divis benutzt anstelle dem halben Geviert (Siehe dazu auch diesen Beitrag). Wie kann ich nun alle diese Striche im Dokument suchen und automatisch ersetzen lassen wie in der Textbox rechts? Das Problem ist ja dass beim normalen Suchen/Ersetzen keine Joker benutzt werden können, d.h. die Zahlen würden mit ersetzt werden. Man will aber in diesem Fall nur Jahreszahlen suchen, also vierstellige Zahlen, gefolgt von Divis, gefolgt von einer zweiten Jahreszahl. Und von dem gefundenen soll nur das Divis ersetzt werden.

Über Apfel-F (Strg-F) gelangt man in das SUchen/Ersetzen-Feld. Dort gibt es einen neuen Tab »GREP«. Im Suchen-Feld gibt es rechts davon einen ausklappbaren Button wo man so einige Suchoptionen auswählen kann. InDesign fügt dann automatisch die richtigen Suchzeichen ein. Da bei den »Wildcards« gibt es z.B. den Eintrag »Any Digits«. Das kennt man auch schon von der regulären Suche, aber da ist der Suchstring anders (^9).

Für unser Beispiel brauchen wir also 4-stellige Zahlen, also 4 mal »\d«. Die ganze Jahreszahl setzen wir in Klammern. Dann kommt das Divis und dann nocheinmal das gleiche. Im Ersetzen-Feld nun können wir InDesign veranlassen, das erste gesuchte, was wir zwischen Klammern gesetzt haben, nicht zu verändern und 1:1 zu übernehmen. Dazu tippen wir einfach »$1«, gefolgt von dem Halbgeviertstrich (Mac: Alt-Divis, Win: Alt-0150) und »$2«, also den zweiten gefundenen Block. Das Dollarzeichen übernimmt immer das gefundene aus dem Suchfeld. Wenn ich statt »$1–$2« das ganze umdrehe zu »$2–$1«, dann werden die Jahreszahlen alle umgedreht. Macht zwar hier keinen Sinn abwer weiter unten kommt ein Beispiel wo man das durchaus benutzen kann um Dinge umzustellen und neuzuordnen.

grep_bisstriche_string

Alles Kursiv was zwischen Anführungszeichen steht

Diese Anforderung kann man ohne GREP ebenfalls nicht ohne weiteres lösen. Mit ein klein wenig Wissen um das geheinisvolle GREP jedoch ist das kein größeres Problem.

Es muß auch gesagt werdenm, dass jede Aufgabe ein anderes Herangehen erfordert. Oft ist es möglich auf vielen verschiedenen Wegen zum Ziel zu kommen. Ist die Aufgabenstellung also ein wenig anders im eigenen Fall, kann es vorkommen, dass man den Suchstring verändern muß.

Also jetzt zum nächsten Beispiel. Wir haben einen Text und in diesem befinden sich verschiedene Sätze in Anführungszeichen. Diese sollen ausgezeichnet werden. Z.B. Kursiv oder Fett. Ich habe hier fett gewählt weil man das Ergebnis hier so besser sieht.

grep_anfuehrungszeichenWie lautet hier der Suchbegriff? Nun, wir suchen alles was zwischen Anführungszeichen steht, also setzen wir die mal hin. Dann: Zwischen den Anführungszeichen ist was? Wir benutzen das Ausklappmenü und gehen zu den Wildcards. »Any Character«, also irgendein Zeichen, könnte man nehmen. Aber nicht nur eins sondern mehrere. Dazu gibt es im Ausklappmenü die Wiederholungen (Repeat). Der Eintrag »One or more« (ein- oder mehrmals) würde hier passen. Ein Plus-Zeichen wird eingesetzt. Aber halt: Würde man so suchen (und das sollte man als Test dann auch mal versuchen) verhält InDesign sich, wie die Ameriakner sgane: greedy. Also gierig. Was soll das heißen?

Haben wir z.B. einen Satz der so aussieht: »bla bla bla« und »bla bla bla« würde InDesign bei dieser GREP-Suche alles anwählen, also die ganze erste Anführung bis die zweite mit. (Einfach mal ausprobieren) Soll das »und« dazwischen in diesem Fall nicht mitgenommen werden müssen wir hier auf einen anderen Ausdruck zurückgreifen. Im Ausklappmenü bei »Wiederholungen« gibt es noch: »Ein- oder mehrmals (kürzestes Ergebnis)«. Dieser Eintrag setzt nun anstatt nur einem Plus-Symbol noch ein Fragezeichen hinten dran. Und jetzt mal gestestet und es klappt. Ersetzt muß dann nur noch durch das entsprechende Zeichenformat werden. Das Ersetzen-Feld bleibt leer.

grep_anfuehrungszeichen_string

Mal-Zeichen und richtige Anführungsstriche

In diesem Beispiel geht es darum, die falschen Malzeichen auszuwechseln, jeweils ein Spatium davor und dahinter zu stellen damit es nicht so an der Ziffer klebt und zusätzlich die Anführungszeichen auszuwechseln.

grep_zahlen

Die linke Spalte soll zur rechten werden. Wie man hier sieht, sind englische Anführungen benutzt worden. Wir wollen aber die deutschen. Un anstatt dem Malzeichen ein X. Nun wie lautet der »Searchstring«?

Englisches Anführungszeichen auf, dann Klammer auf, denn jetzt definieren wir einen Block der nachher 1:1 übernommen werden soll. Und zwar ist dies die Zahl die folgt. Also zu den Wildcards: »Any Digit«. Ein Backslash und d wird eingefügt. Klammer zu, denn jetzt etwas, das ersetzt werden soll. Das X. Dann wieder Klammer auf und der nächste Block mit der Ziffer die übernommen wird. Englisches Anführungszeichen geschlossen.

Im Ersetzen-Feld nun: Deutsches Anführungszeichen auf, dann die erste gefundene Zahl übernehmen ($1), dann einen kleinen Abstand einfügen aus dem Aufklappmenü (hier im Screenshot Achtelgeviert, was mit Tilde und < beschrieben wird). Ja, dann das richtige Malzeichen aus den Glyphen rausgesucht und die zweite gefundene Zahl übernehmen. Deutsche Anführung geschlossen. Und das war’s auch schon. Eigentlich einfach wenn man einmal das System ein bisschen durchblickt hat. Das sieht dann so aus:

grep_zahlen_string

Wörter umstellen

GREP kann auch dazu benutzt werden, nicht um was zu ersetzen, sondern nur um Dinge umzustellen. Z.B. eine Liste mit Namen.

namen_aendern1

Die Liste soll jeweils mit den Nachnamen beginnen. Also Wildcard: Klammer auf und: jedes Zeichen (Any Character) und dies ein- oder mehrmals. In GREP dargestellt durch Punkt und Pluszeichen. Dann kommt ein Wortabstand und nochmal das Gleiche. Im Ersetzenfeld nun erst das zweite gefundene Wort ($2), Abstand und dann das erste gefundene Wort ($1). Das war’s.

namen_aendern_string

Natürlich wird die Sache komplizierter wenn jetzt z.B. Einträge vorkommen mit zwei Vornamen u.s.w. In dem Fall müsste der Suchstring abgewandelt werden. Aber für diesen Blogpost reicht das erst mal.

Weiterführende Infos

http://indesignsecrets.com/grep

Auf Gerald Singelmann’s sehr guten InDesign FAQ-Seite:
http://www.indesign-faq.de/de/grep-und-indesign

http://www.regenechsen.de/phpwcms/index.php?regex_allg

GREP O’Reilly Shortcut vom Experten Peter Kahrel:
http://oreilly.com/catalog/9780596802523/

14 Responses to GREP – Nicht nur für Programmierer

  1. Hallo Lukas,

    Es sind ein paar Jahre jetzt her, dass ich mich ein wenig mir GREP beschäftigt habe. Seit meinem Jobwechsel ist das für mich nichts mehr das mir in meinem Alltag begegnet und womit ich mich tiefer beschäftige. Somit kann ich dir in dieser Hinsicht leider nicht weiter helfen. Ich empfehle dir, hier nachzufragen.

    Viele Grüße,
    Sacha

  2. Vielen Dank für die ausführliche Erklärung dieses sehr hilfreichen aber komplexen Themas GREP.

    Ich versuche gerade ein Spatium (Sechstelgeviert) zwischen kursiven Textstellen mit darauffolgenden geraden Fußnotenziffern einzufügen.

    Mein Suchterm:
    (?<!.)\b(?=~F)

    Mein Ersatzterm:
    $1~%$2

    Was mache ich falsch? Die Suche liefert die richtigen Stellen, aber es wird nichts eingefügt.

    HELP!!!!

    Viele Grüße
    Lukas

  3. Ich könnte mich bei diesen Fachbegriffen immer mopsen! Was bitte soll ein halbes Geviert sein? Eher ein Geachtel?

  4. Hi Michael,

    Übrigens: Ich hab das schon ein paar mal nachgeschaut und meine Referenzwerke zur Typografie (Detailtypografie von Forssmann / de Jong und der Chicago Manual of Style) geben alle an, dass bei Ordinalzahlen nichts hochgestellt wird. Also ganz einfach 1st, 2nd, 3rd u.s.w. wobei sogar auch das n wegfallen darf: 1st, 2d, 3d u.s.w. Dann würde die GREP-Strapaze wegfallen ;-)

    Gruß,
    Sacha

  5. … und jetzt eine Detailfrage:

    in einem längeren englischen Text stehen etliche Ordinalzahlen (1st, 2nd, 3rd, 4th usw.). Ich möchte erreichen, dass die Zahlen normal bleiben, die Buchstaben aber hochgestellt sind (die zu verwendende Schrift ist leider kein .otf). Ich habs zwar mit zwei Schritten – und zwei Zeichenformaten – hinbekommen (erstmal \d+\w+ –> hochgestellt, dann \d+ –> normal), aber effizienter wäre es in einem Schritt.

    Das geht doch bestimmt, und welchen Grep-Ausdruck gibt es hierfür?

    Danke und Gruß
    Michael

  6. Mal wieder eine sehr gut verständliche und auch gleich nachvollziehbare Anleitung zum Thema Grep! Wenn man sich erstmal mit diesem anfangs eher spröden Thema beschäftigt hat, merkt man sehr schnell, dass die Arbeit gerade im Textbearbeitungs- und Layoutbereich deutlich effizienter wird.

    Michael

  7. Vielen Dank für die verständlichen Erläuterungen zum Grep Search. Ich habe versucht Begriffe in runden Klammern umzuformatieren. Das ist erst mal nicht geglückt. Habe dann alle Klammern in Anführungszeichen umgewandelt und mich der von Ihnen beschriebenen Suche “.+?” bedient. Hat sehr gut geklappt. Danach habe ich die An- und Abführungen wieder in Klammern umgewandelt und hatte mein Ergebnis. Vielen Dank!!!

    Stephan

  8. Vielen Dank für die verständlichen Erläuterungen zum Grep Search. Ich habe versucht Begriffe in runden Klammern umzuformatieren. Das ist erst mal nicht geglückt. Habe dann alle Klammern in Anführungszeichen umgewandelt und mich der von Ihnen beschriebenen Suche „.+?“ bedient. Hat sehr gut geklappt. Danach habe ich die An- und Abführungen wieder in Klammern umgewandelt und hatte mein Ergebnis. Vielen Dank!!!

    Stephan

Eine Antwort hinterlassen