suchen und ersetzen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von lutz2, 01.07.2007.

  1. lutz2

    lutz2 Grünschnabel

    Dabei seit:
    01.07.2007
    Beiträge:
    3
    Zustimmungen:
    0
    hallo,

    habe eine textdatei, welche zur weiterverarbeitung verändert werden soll.
    es handelt sich um eine gpx datei, die mehrere tracks mit dem selben namen
    hat.

    <name>track</name>
    <trkseg>
    <trkpt lat="51.405276500" lon="13.251133700">
    <ele>0.000000</ele>
    <time>2007-07-01T00:00:00Z</time>
    </trkpt>
    <trkpt lat="51.405354100" lon="13.252285600">
    <ele>0.000000</ele>
    <time>2007-07-01T00:00:00Z</time>
    </trkpt>
    </trkseg>
    </trk>
    <trk>
    <name>track</name>
    <trkseg>
    <trkpt lat="51.475959500" lon="13.104809300">
    <ele>0.000000</ele>
    <time>2007-07-01T00:00:00Z</time>
    </trkpt>
    <trkpt lat="51.479287300" lon="13.109352100">
    <ele>0.000000</ele>
    <time>2007-07-01T00:00:00Z</time>
    </trkpt>
    <trkpt lat="51.479094600" lon="13.110714900">
    <ele>0.000000</ele>

    mit sed bzw. perl ist es mir zwar möglich, alle tracknamen in einen anderen umzuwandeln, aber zur weiterverarbeizung müßten alle tracks einen anderen namen haben zB. 1. tack=track1 , 2. track=track2 usw.

    habe nach langer suche in mehreren perl bzw. linuxforen nicht mal eine ansatz gefunden, den ich halbwegs verstehe.

    habe auch keine coder erfahrungen!
    kann mir jemand helfen?

    mfg lutz
     
  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 smg, 01.07.2007
    Zuletzt bearbeitet: 01.07.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Code:
    perl -i.bak -pe 's/(track)/ ++$x . "." . $1 . "=" . $1 . "$x" /xeg; ' test.txt
     
  4. #3 Wolfgang, 01.07.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Die Option x beim Ersetzen kannst du weglassen.
    Stattdessen würde ich i vorschlagen, falls Track in Großbuchstaben vorkommt.

    Code:
    perl -i -pe 's/track/${&}.$i++/ieg' inputfile
    
    ;)

    GNU sed variante
    Code:
    sed  -i -e "s/track/&_$((x++))/ig" inputfile
    
    Gruß Wolfgang
     
  5. lutz2

    lutz2 Grünschnabel

    Dabei seit:
    01.07.2007
    Beiträge:
    3
    Zustimmungen:
    0
    danke smg und wolfgang, :-)

    habe ganze nächte um die ohren geschlagen, und dann geht das mit einer zeile.

    die perl sachen funktionieren beide auf anhieb, bei sed heißt jetzt jeder track
    track_0,
    habt mir sehr geholfen, DANKE!!!

    mfg lutz
     
  6. #5 Wolfgang, 01.07.2007
    Zuletzt bearbeitet: 01.07.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Jo sed geht nicht, sorry war ein Denkfehler von mir.

    Gruß Wolfgang
     
  7. lutz2

    lutz2 Grünschnabel

    Dabei seit:
    01.07.2007
    Beiträge:
    3
    Zustimmungen:
    0
    passt schon, :-)

    danke für die schnelle hilfe
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Wolfgang, 01.07.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Dafür noch eine Lösung mit reinen Bashmitteln, allerdings nicht als Einzeiler

    Code:
    x=0;
    while read line; 
    do 
    echo $line|grep "track" >/dev/null &&((x++)); 
    a="$(printf %02d $x)";
    echo ${line/track/track$a};
    done < test  >output
    
    ;)
    Mit Vornullen zweistellig

    Gruß Wolfgang
     
  10. #8 Schlaubi_fi.de, 02.07.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Code:
    x=0; while read line; do echo $line|grep "track" >/dev/null && ((x++)); a="$(printf %02d $x)"; echo ${line/track/track$a}; done < test  >output
    ...sag sowas nicht (sorry, konnte ich mir jetzt nicht verkneifen) :D :D
     
Thema:

suchen und ersetzen

Die Seite wird geladen...

suchen und ersetzen - Ähnliche Themen

  1. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  2. sed suchen und ersetzen mit Variable übergeben?

    sed suchen und ersetzen mit Variable übergeben?: hallo, ich habe folgenden sed-Befehl, der schon super ist und auch alles tut, was er tun soll, nur eben natürlich das $i einfach hinschreibt...
  3. Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen

    Zeilenweise suchen, löschen und ersetzen / Inhalt einfügen: Hallo liebe Community. Habe ein kleines Problem und bin leider nicht so der Linux-Freak... Ich hoffe mal ihr könnt mir da vielleicht ein wenig...
  4. Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen

    Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen: Hallo zusammen, ich habe bereits diverse Google-Suchergebnisse durchforstet, habe jedoch nirgendwo eine verwertbare Lösung für mein Anliegen...
  5. Maskiertes Suchen, Ersetzen und Rechnen in access.log vor weitere Bearbeitung

    Maskiertes Suchen, Ersetzen und Rechnen in access.log vor weitere Bearbeitung: Hallo, vielen Dank nochmal für die konstruktive Hilfe in meiner letzten Anfrage. Aktuell zu meinem kleinen Auswertungsprojekt habe ich eine...