sed/tr: Zeilenumbruch mit führendem Bindestrich ersetzen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von nfidia, 06.04.2009.

  1. nfidia

    nfidia Jungspund

    Dabei seit:
    06.03.2009
    Beiträge:
    19
    Zustimmungen:
    0
    Hi,

    ich hab mir schon einen Wolf abgesucht im Netz, ich kriegs nicht hin:

    Eine Text-Datei enthält z.B. folgende 2 Zeilen:

    Ich möchte, dass das Wort "Maßnahmen" nicht durch ein Bindestrich und einen Zeilenumbruch getrennt ist. Die beiden Zeilen sollen in eine zusammengefasst werden:

    Den Zeilenumbruch löschen krieg ich mit sed nicht hin:

    Code:
    sed 's/\n//' Datei1 > Datei2
    => geht nicht. Der Zeilenumbruch bleibt bestehen

    Mit dem Programm tr können auch Zeichen ersetzt werden. Das klappt auch:

    Code:
    cat Datei1 | tr -d "\n" > Datei2
    Dann bleibt aber der Bindestrich übrig:

    Ich habe nicht rausbekommen, wie ich dem Programm beibringe, dass es sowohl den Bindestrich wie auch den Zeilenumbruch in Form eines Strings wie "-\n" löscht.

    PS: Diesmal bin ich unter Debian 4.x unterwegs, nicht mit Cygwin.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Aqualung, 06.04.2009
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
  4. nfidia

    nfidia Jungspund

    Dabei seit:
    06.03.2009
    Beiträge:
    19
    Zustimmungen:
    0
    Dankeschön

    Hi Aqualung,

    vielen Dank für diese Befehlszeile :) - da wäre ich nie drauf gekommen, ich habe bisher nur Basiskenntnisse, würde ich mal sagen, was sed betrifft.

    Die Befehlszeile funktioniert aber nicht in jeder Zeile wie gewünscht.

    Mir fiel auf, dass wenn drei Zeilen in der Quelldatei so aussehen:

    , dass das Ergebnis dann so aussieht:

    Außerdem gibt es in einer der Quelldateien und an auch folgenden Zeilenaufbau:

    Code:
    1. Dies ist die erste Zei-
      le und dies ist die zweite Zeile
    Das Ergebnis ist dann:

    Deswegen mache ich das so:

    Code:
    sed 'N;s/-\n//;P;D;' Datei > refined_1.txt
    sed 's/  //g' refined_1.txt > refined_2.txt # lösche jeweils zwei Leerzeichen
    sed 's/   //g' refined_2.txt > refined_3.txt # lösche jeweils drei Leerzeichen
    sed 'N;s/-\n//;P;D;' refined_3.txt > refined_4.txt
    sed 'N;s/-\n//;P;D;' refined_4.txt > result.txt
    Das ist zwar quick and dirty, aber das Ergebnis - zumindest bei der einen Datei, die ich untersucht habe, ist das gewünschte ;-)
     
  5. #4 hostmolch, 07.04.2009
    hostmolch

    hostmolch Grünschnabel

    Dabei seit:
    07.04.2009
    Beiträge:
    3
    Zustimmungen:
    0
    Eine weitere effizientere Möglichkeit wäre so:

    > cat test.sh

    #!/bin/bash
    while read line;
    do
    if [ "${line: -1}" = "-" ];then
    echo -n ${line:0:${#line}-1};
    else
    echo $line;
    fi
    done < textfile.txt

    > cat textfile.txt

    aaa bbb ccc-
    ccc ddd eee-
    eee fff ggg
    ggg

    > ./test.sh
    aaa bbb cccccc ddd eeeeee fff ggg
    ggg


    lg host


    ps: is jetzt ohne form auch nur quick n dirty ...
     
  6. nfidia

    nfidia Jungspund

    Dabei seit:
    06.03.2009
    Beiträge:
    19
    Zustimmungen:
    0
    Hi hostmolch,

    vielen Dank für Deine Mühe!

    Hm, vielleicht sollte ich einfach einen Indexierer nehmen.

    Denn ich manipuliere die Textdateien in der beschriebenen Weise (getrennte Wörter wieder zusammenfügen, dabei nacheinander folgende Leerzeichen mit einer Menge >1löschen, damit ich anschließend mittels grep in den Textdateien nach kompletten Begriffen/Strings suchen kann.

    Ich guck mir mal

    http://regain.sourceforge.net/?lang=de

    an, vielleicht macht ja der eingesetzte "intelligente" Indexer genau das, was ich mir vorstelle?
     
  7. #6 hostmolch, 08.04.2009
    hostmolch

    hostmolch Grünschnabel

    Dabei seit:
    07.04.2009
    Beiträge:
    3
    Zustimmungen:
    0
    Jo mach das mal falls du noch was brauchst melden.

    lg Host
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema: sed/tr: Zeilenumbruch mit führendem Bindestrich ersetzen
Besucher kamen mit folgenden Suchen
  1. zeilenumbruch in sed ersetzen

    ,
  2. sed zeilenumbruch ersetzen

    ,
  3. zeilenumbruch bash anhängen

    ,
  4. sed lösche zeilenumbruch
Die Seite wird geladen...

sed/tr: Zeilenumbruch mit führendem Bindestrich ersetzen - Ähnliche Themen

  1. Script Zeilenumbruch -> Leerzeichen

    Script Zeilenumbruch -> Leerzeichen: Wie muß folgendes Script für die Bash aussehen: Ich habe eine Textdatei mit einer Liste von (distributionseigenen)-Programmen, die ich...
  2. Wert an Zeile anhängen, kein Zeilenumbruch

    Wert an Zeile anhängen, kein Zeilenumbruch: Hallo, ich durchsuche (grep) eine Datei und möchte einzelne Werte herausfiltern (cut) und diese in eine andere Datei (csv) speichern. Nun soll...
  3. Zeilenumbruch in Dateiname auf Konsole eingeben

    Zeilenumbruch in Dateiname auf Konsole eingeben: Hallo, kann mir jemand sagen, wie ich einen Zeilenumbruch im Dateinamen auf der Konsole eingebe? Z.b. wenn ich eine Datei mit "touch" erstellen...
  4. automatischer Zeilenumbruch in bash

    automatischer Zeilenumbruch in bash: Hallo! Bei mir ist folgendes Problem plötzlich aufgetaucht, was sich möglicherweise ganz einfach lösen lässt, nur ich komme leider nich drauf....
  5. Problem mit sed Zeilenumbruch

    Problem mit sed Zeilenumbruch: Hallo, ich möchte mit einem Perl Script über sed eine Zeile in eine Datei einfügen. Ich sende Befehle über rsh mit folgendem Befehl:...