ganze Absätze ersetzen

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von ulukai, 08.05.2006.

  1. ulukai

    ulukai Jungspund

    Dabei seit:
    08.05.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo Leute
    Ich bin gerade dabei an folgendem Problem zu verzweifeln, ich hoffe Ihr könnt mir helfen.
    Ich habe recht Viele Textdateien in denen ich ganze Absätze suchen und ersetzen muß. Außerdem muß ich Teile des alten Absatzes in den neuen einbauen.
    Also zum Beispiel:

    Text
    Text
    A
    A
    A ->"Name"
    A

    soll zu

    Text
    Text
    B ->"Name"
    B

    werden. "Name" steht dabei immer für etwas anderes. Das Suchpattern soll also:

    A
    A
    A -> *
    A

    oder so sein. Mit sed bin ich nicht weitergekommen und ein Bekannter meint mit Perl sollte es gehen...
    Besten Dank für eure Hilfe
     
  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Yep, Perl ist dafür geeignet. Dein Beispiel lässt sich mit

    Code:
    perl -pi -e 's/Text\nText\nA\nA\nA ->"Name"\nA/Text\nText\nB ->"Name"\nB/g' file
    
    erschlagen. Dabei sorgt "-0\777" dafür, dass Perl das File als ein String einliest. Deswegen darf das File nicht zu gross sein (ein paar MB). "\n" entspricht dem Newline an jedem Zeilenende.

    Gruss, Xanti
     
  4. ulukai

    ulukai Jungspund

    Dabei seit:
    08.05.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Danke für die schnelle Antwort! So ganz habe ich es nocht nicht verstanden.

    Mit "Name" meine ich eigentlich das in den jweiligen Textdateien dafür immer etwas anderes steht was in den neuen Absatz übernommen werden soll. Kann ich bei Perl mit den "normalen" bash regular expressions arbeiten? Also so etwas wie

    perl -pi -e 's/Text\nText\nA\nA\nA ->"(.*)"\nA/Text\nText\nB ->"\1"\nB/g' file

    Muß ich bei Perl Sonderzeichen auch mit einem \ versehen (etwas \[ für [)?
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Im Grunde schon, obwohl die Bash-Regexps eher von Perl abstammen. Dein Beispiel ist syntaktisch richtig. Falls Name über mehrere Zeilen geht, solltest Du die Option /s zusätzlich (also /gs statt /g) wählen, damit "." auch "\n" matcht. Folgende Sonderzeichen haben eine Sonderfunktion beim Matchen und müssen deswegen "escaped" werden: +?.*^$()[{|\

    Gruss, Xanti
     
  6. ulukai

    ulukai Jungspund

    Dabei seit:
    08.05.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Besten Dank! Ich werds gleich morgen in der Uni testen.
     
  7. #6 Wolfgang, 08.05.2006
    Zuletzt bearbeitet: 08.05.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Geht auch mit sed :D

    Wenn du GNU sed hast, kennt auch sed die Option -i um die datei direkt zu editieren.
    Mit perl ist die Lösung aber für kleine Dateien besser, da du dort auch ein Backup angeben kannst.
    Bei großen Dateien geht es auch mit sed.
    Hast du kein GNU sed , bau dir eine einfache Schleife drum und arbeite mit Umleitung.
    Code:
    for I in $(find -iname "name*"); do sed -ne '...' $I > $I_output&& cat $I_output >$I; done
    oder mit while read oder oder...;)
    HTH
    Gruß Wolfgang

    Edit// Sed noch etwas verbessert,damit Namea nicht feststeht und nur A am Anfang verändert wird, nicht aber in der Zeilenmitte.
     
  8. ulukai

    ulukai Jungspund

    Dabei seit:
    08.05.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Hallo, muss nochmal nerven...

    hollstei@george:~> cat ptest
    Text
    Name
    Neu
    hollstei@george:~> perl -pi -e 's/Text\nName/Tux\nTux/g' ptest
    hollstei@george:~> cat ptest
    Text
    Name
    Neu
    hollstei@george:~>

    Wieso funktioniert das nicht? Ich wollte ersteinmal ein einfachen Test machen...
    Beste Gruesse Andre
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Weil ich oben die Option "-0\777" vergessen habe. Dabei hab ich sie erklärt...:think:

    Egal, der Befehl müsste

    Code:
    perl -0\777 -pi -e 's/Text\nName/Tux\nTux/g' ptest
    
    lauten. Normalerweise liest Perl Zeile für Zeile und kann deswegen Suchmuster, die über mehrere Zeilen gehen, nicht matchen. Mit der Option "-0\777" wird das File als ein grosser String eingelesen. Nachteil ist, dass das File nicht zu gross sein darf. Dann ist Wolfgangs Vorschlag mit sed zu bevorzugen.

    Gruss, Xanti
     
  11. ulukai

    ulukai Jungspund

    Dabei seit:
    08.05.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Super jetzt funktiniert es!
    Ich dak euch...
     
Thema:

ganze Absätze ersetzen

Die Seite wird geladen...

ganze Absätze ersetzen - Ähnliche Themen

  1. Txt Inhalt bearbeiten/ergänzen

    Txt Inhalt bearbeiten/ergänzen: Hi, ich habe folgendes Problem. In meiner txt habe ich mehrere Links untereinander aufgefuehrt. http://www.link1.de/ordner...
  2. Offenheit und Freiheit für die ganze Welt: Die »Französische Revolution«

    Offenheit und Freiheit für die ganze Welt: Die »Französische Revolution«: Die Bewegung für Open Source und Open Data erfasst immer größere Bereiche. In Frankreich ist diese Entwicklung bereits ziemlich weit...
  3. Offenheit und Freiheit für die ganze Welt: Die »Französische Revolution«

    Offenheit und Freiheit für die ganze Welt: Die »Französische Revolution«: Die Bewegung für Open Source und Open Data erfasst immer größere Bereiche. In Frankreich ist diese Entwicklung bereits ziemlich weit...
  4. ganze Netzwerkumgebung schagartig unsichtbar - 0S 13.1

    ganze Netzwerkumgebung schagartig unsichtbar - 0S 13.1: Hallo, ich habe einen Samba-Server auf os 13.1-32 aufgesetzt und konnte bislang die Freigaben (homes usw .. ) in der Windows-Netzwerkumgebung...
  5. html2text für ganzes Verzeichnis

    html2text für ganzes Verzeichnis: Hallo Versuche mit dem Programm html2text html nach txt zu konvertieren Syntax html2text test.html > test.txt klappt ohne Probleme, jetzt...