Regexp / Zeilen ohne einen Punkt am Ende finden
Hallo Liste, irgendwie stehe ich jetzt auf dem Schlauch und komme nicht weiter. Ich habe eine PDF-Datei mit 'pdftotext' in eine Textdatei konvertiert. Bisher ist es mir gelungen, Zeilen, die mit "-" oder "," enden mit entsprechenden Regexps zu finden und mit darauffolgenden Zeilen zusammenzufügen. Nun aber sollte ich noch Zeilen, an deren Ende KEIN Punkt steht, mit der nächsten Zeile zusammenfügen. Beispiel (3 Zeilen): --- snip --- Diese Spielräume durch höhere Steuern oder neue Schulden wieder zu vergrößern, würde den dringend benötigten wirtschaftlichen Aufschwung und damit Arbeitsplätze gefährden und wäre ungerecht gegenüber kommenden Generationen. --- snip --- Diese drei Zeilen sollten zusammengefügt werde, so dass der "\n" (vor dem KEIN Komma steht) durch " " ersetzt werden sollte. Irgendwie kriege ich dies nicht hin. Habe u.a. mit "(?!.)\n" versucht, aber ohne Erfolg. Was wäre die richtige Regexp-Formel? Danke schon im voraus & Gruß, Kimmo
Hallo Kimmo, Am 15. September 2021 12:08:59 MESZ schrieb Kimmo Elo <kimmo.m.elo@gmail.com>:
Hallo Liste,
irgendwie stehe ich jetzt auf dem Schlauch und komme nicht weiter. Ich habe eine PDF-Datei mit 'pdftotext' in eine Textdatei konvertiert. Bisher ist es mir gelungen, Zeilen, die mit "-" oder "," enden mit entsprechenden Regexps zu finden und mit darauffolgenden Zeilen zusammenzufügen.
Nun aber sollte ich noch Zeilen, an deren Ende KEIN Punkt steht, mit der nächsten Zeile zusammenfügen. Beispiel (3 Zeilen):
--- snip ---
Diese Spielräume durch höhere Steuern oder neue Schulden wieder zu vergrößern, würde den dringend benötigten wirtschaftlichen Aufschwung und damit Arbeitsplätze gefährden und wäre ungerecht gegenüber kommenden Generationen.
--- snip ---
Diese drei Zeilen sollten zusammengefügt werde, so dass der "\n" (vor dem KEIN Komma steht) durch " " ersetzt werden sollte.
Irgendwie kriege ich dies nicht hin. Habe u.a. mit "(?!.)\n" versucht, aber ohne Erfolg. Was wäre die richtige Regexp-Formel?
versuche es doch Mal mit [^.] Bedeutet: Zeichengruppe, negiert (wegen ^ am Anfang), enthaltene Zeichen: . (Der Punkt). Viel Erfolg. Gruß Mark
Hallo Mark, Dein Vorschlag war richtig, Danke! Aber nun eine anschließende Frage: mit 'sed' kann ich den Treffer - indem ich das Muster als "\([^.]\)\n" umformuliere - mit \1 in der Ersetzung verwenden. Wie erreiche ich dies aber mit 'mc' bzw. 'xed'? Gegenwärtig wird das letzte Zeichen durch " " ersetzt, was nicht meine Zielsetzung ist :-) BG, Kimmo ke, 2021-09-15 kello 12:55 +0200, mark.wenzel@gmx.net kirjoitti:
Hallo Kimmo,
Am 15. September 2021 12:08:59 MESZ schrieb Kimmo Elo < kimmo.m.elo@gmail.com>:
Hallo Liste,
irgendwie stehe ich jetzt auf dem Schlauch und komme nicht weiter. Ich habe eine PDF-Datei mit 'pdftotext' in eine Textdatei konvertiert. Bisher ist es mir gelungen, Zeilen, die mit "-" oder "," enden mit entsprechenden Regexps zu finden und mit darauffolgenden Zeilen zusammenzufügen.
Nun aber sollte ich noch Zeilen, an deren Ende KEIN Punkt steht, mit der nächsten Zeile zusammenfügen. Beispiel (3 Zeilen):
--- snip ---
Diese Spielräume durch höhere Steuern oder neue Schulden wieder zu vergrößern, würde den dringend benötigten wirtschaftlichen Aufschwung und damit Arbeitsplätze gefährden und wäre ungerecht gegenüber kommenden Generationen.
--- snip ---
Diese drei Zeilen sollten zusammengefügt werde, so dass der "\n" (vor dem KEIN Komma steht) durch " " ersetzt werden sollte.
Irgendwie kriege ich dies nicht hin. Habe u.a. mit "(?!.)\n" versucht, aber ohne Erfolg. Was wäre die richtige Regexp-Formel?
versuche es doch Mal mit [^.] Bedeutet: Zeichengruppe, negiert (wegen ^ am Anfang), enthaltene Zeichen: . (Der Punkt). Viel Erfolg. Gruß Mark
Hallo Kimmo, mit mc und xed habe ich noch nie gearbeitet. Ich gehe aber davon aus, dass der Ausdruck sich vielleicht in den Maskierungen unterscheiden könnte. Zum besseren Verständnis deines Problems wäre es hilfreich, wenn du mal die ganze Befehlszeile aufschreiben würdest. Da du mit sed schon Erfolg hattest: Warum willst du noch auf ein anderes Werkzeug wechseln? Ich arbeite da gerne mit Pipes. So kann ich die einzelnen Schritte jeweils gut testen. Am Ende werden alle Schritte hintereinander mittels Pipes zusammengesetzt. Das funktioniert in der Regel sehr komfortabel. Und sed ist dazu gerade prädestiniert. Gruß Mark Am 15. September 2021 13:37:01 MESZ schrieb Kimmo Elo <kimmo.m.elo@gmail.com>:
Hallo Mark,
Dein Vorschlag war richtig, Danke! Aber nun eine anschließende Frage: mit 'sed' kann ich den Treffer - indem ich das Muster als "\([^.]\)\n" umformuliere - mit \1 in der Ersetzung verwenden. Wie erreiche ich dies aber mit 'mc' bzw. 'xed'? Gegenwärtig wird das letzte Zeichen durch " " ersetzt, was nicht meine Zielsetzung ist :-)
BG, Kimmo
ke, 2021-09-15 kello 12:55 +0200, mark.wenzel@gmx.net kirjoitti:
Hallo Kimmo,
Am 15. September 2021 12:08:59 MESZ schrieb Kimmo Elo < kimmo.m.elo@gmail.com>:
Hallo Liste,
irgendwie stehe ich jetzt auf dem Schlauch und komme nicht weiter. Ich habe eine PDF-Datei mit 'pdftotext' in eine Textdatei konvertiert. Bisher ist es mir gelungen, Zeilen, die mit "-" oder "," enden mit entsprechenden Regexps zu finden und mit darauffolgenden Zeilen zusammenzufügen.
Nun aber sollte ich noch Zeilen, an deren Ende KEIN Punkt steht, mit der nächsten Zeile zusammenfügen. Beispiel (3 Zeilen):
--- snip ---
Diese Spielräume durch höhere Steuern oder neue Schulden wieder zu vergrößern, würde den dringend benötigten wirtschaftlichen Aufschwung und damit Arbeitsplätze gefährden und wäre ungerecht gegenüber kommenden Generationen.
--- snip ---
Diese drei Zeilen sollten zusammengefügt werde, so dass der "\n" (vor dem KEIN Komma steht) durch " " ersetzt werden sollte.
Irgendwie kriege ich dies nicht hin. Habe u.a. mit "(?!.)\n" versucht, aber ohne Erfolg. Was wäre die richtige Regexp-Formel?
versuche es doch Mal mit [^.] Bedeutet: Zeichengruppe, negiert (wegen ^ am Anfang), enthaltene Zeichen: . (Der Punkt). Viel Erfolg. Gruß Mark
Hallo, normalerweise erledige ich solche Sachen mit sed/awk, aber mit diesen Textdateien gibt es das Problem, dass die Struktur gegliedert ist. D.h. es gibt eine recht grosse Anzahl von Unterkapiteltitel, die auch ohne Punkt am Ende der Zeile vorkommen. Diese weise keine einheitliche Struktur aus - habe also z.B. keine Numerierung - mit der sie ignoriert werden könnten. Deswegen habe ich 'mc' eingesetzt, weil ich da auch Kontrolle darüber habe, ob zwei Zeilen zusammengefügt werden sollten oder nicht. Klar, etwas mehr Tastaturquälerei, aber eben keine mühsame Nacharbeit. Also sollte jemand wissen, wie man das Suchergebnis mit 'mc' oder 'xed' speichern und wiederverwenden kann, bin ich dankbar. BG, Kimmo ke, 2021-09-15 kello 13:54 +0200, mark.wenzel@gmx.net kirjoitti:
Hallo Kimmo, mit mc und xed habe ich noch nie gearbeitet. Ich gehe aber davon aus, dass der Ausdruck sich vielleicht in den Maskierungen unterscheiden könnte. Zum besseren Verständnis deines Problems wäre es hilfreich, wenn du mal die ganze Befehlszeile aufschreiben würdest. Da du mit sed schon Erfolg hattest: Warum willst du noch auf ein anderes Werkzeug wechseln? Ich arbeite da gerne mit Pipes. So kann ich die einzelnen Schritte jeweils gut testen. Am Ende werden alle Schritte hintereinander mittels Pipes zusammengesetzt. Das funktioniert in der Regel sehr komfortabel. Und sed ist dazu gerade prädestiniert. Gruß Mark
Am 15. September 2021 13:37:01 MESZ schrieb Kimmo Elo < kimmo.m.elo@gmail.com>:
Hallo Mark,
Dein Vorschlag war richtig, Danke! Aber nun eine anschließende Frage: mit 'sed' kann ich den Treffer - indem ich das Muster als "\([^.]\)\n" umformuliere - mit \1 in der Ersetzung verwenden. Wie erreiche ich dies aber mit 'mc' bzw. 'xed'? Gegenwärtig wird das letzte Zeichen durch " " ersetzt, was nicht meine Zielsetzung ist :-)
BG, Kimmo
ke, 2021-09-15 kello 12:55 +0200, mark.wenzel@gmx.net kirjoitti:
Hallo Kimmo,
Am 15. September 2021 12:08:59 MESZ schrieb Kimmo Elo < kimmo.m.elo@gmail.com>:
Hallo Liste,
irgendwie stehe ich jetzt auf dem Schlauch und komme nicht weiter. Ich habe eine PDF-Datei mit 'pdftotext' in eine Textdatei konvertiert. Bisher ist es mir gelungen, Zeilen, die mit "-" oder "," enden mit entsprechenden Regexps zu finden und mit darauffolgenden Zeilen zusammenzufügen.
Nun aber sollte ich noch Zeilen, an deren Ende KEIN Punkt steht, mit der nächsten Zeile zusammenfügen. Beispiel (3 Zeilen):
--- snip ---
Diese Spielräume durch höhere Steuern oder neue Schulden wieder zu vergrößern, würde den dringend benötigten wirtschaftlichen Aufschwung und damit Arbeitsplätze gefährden und wäre ungerecht gegenüber kommenden Generationen.
--- snip ---
Diese drei Zeilen sollten zusammengefügt werde, so dass der "\n" (vor dem KEIN Komma steht) durch " " ersetzt werden sollte.
Irgendwie kriege ich dies nicht hin. Habe u.a. mit "(?!.)\n" versucht, aber ohne Erfolg. Was wäre die richtige Regexp-Formel?
versuche es doch Mal mit [^.] Bedeutet: Zeichengruppe, negiert (wegen ^ am Anfang), enthaltene Zeichen: . (Der Punkt). Viel Erfolg. Gruß Mark
Hallo, Am Wed, 15 Sep 2021, Kimmo Elo schrieb:
Also sollte jemand wissen, wie man das Suchergebnis mit 'mc' oder 'xed' speichern und wiederverwenden kann, bin ich dankbar. [..]
Dein Vorschlag war richtig, Danke! Aber nun eine anschließende Frage: mit 'sed' kann ich den Treffer - indem ich das Muster als "\([^.]\)\n" umformuliere - mit \1 in der Ersetzung verwenden. Wie erreiche ich dies aber mit 'mc' bzw. 'xed'? Gegenwärtig wird das letzte Zeichen durch " " ersetzt, was nicht meine Zielsetzung ist :-) [..]
Suche: ([^.])\n Ersetze: \1WAS_DU_WILLST\n (wobei das '\n' am Ende der Ersetzung deine Entscheidung ist) Achso, und natürlich "(*) Regular expression" anhakeln. Und schreibe besser mcedit wenn du den meinst... HTH, -dnh -- OTOH, it turned out that when the customer was a church with a Xenix box, having to talk them into a triple-six chmod was a *bit* of an issue. -- Anthony de Boer
Hallo, Dank, David, nun hat es geklappt. Funktioniert so sowohl mit 'xed' wie auch mit 'mcedit' (sorry, 'mc' war unspezifisch). Gruß, Kimmo ke, 2021-09-15 kello 17:06 +0200, David Haller kirjoitti:
Hallo,
Am Wed, 15 Sep 2021, Kimmo Elo schrieb:
Also sollte jemand wissen, wie man das Suchergebnis mit 'mc' oder 'xed' speichern und wiederverwenden kann, bin ich dankbar. [..]
Dein Vorschlag war richtig, Danke! Aber nun eine anschließende Frage: mit 'sed' kann ich den Treffer - indem ich das Muster als "\([^.]\)\n" umformuliere - mit \1 in der Ersetzung verwenden. Wie erreiche ich dies aber mit 'mc' bzw. 'xed'? Gegenwärtig wird das letzte Zeichen durch " " ersetzt, was nicht meine Zielsetzung ist :-) [..]
Suche: ([^.])\n Ersetze: \1WAS_DU_WILLST\n
(wobei das '\n' am Ende der Ersetzung deine Entscheidung ist)
Achso, und natürlich "(*) Regular expression" anhakeln. Und schreibe besser mcedit wenn du den meinst...
HTH, -dnh
participants (3)
-
David Haller
-
Kimmo Elo
-
mark.wenzel@gmx.net