Zeichen ersetzen in einer Datei??

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von ebi-dirk, 05.03.2008.

  1. #1 ebi-dirk, 05.03.2008
    ebi-dirk

    ebi-dirk Grünschnabel

    Dabei seit:
    05.03.2008
    Beiträge:
    1
    Zustimmungen:
    0
    :hilfe2:
    Hallo,

    bin total neu hier und auch auf dem Gebiet vom Shellscript bin ich noch total unerfahren.

    Habe eine Datei in der an der dritten Stelle einer Zeile eine Monatsabkürzung steht wie Jan Feb oder Mar usw. Diese Monatsabkürzung würde ich gerne durch die passende Monatszahl ersetzen wie 01 02 03 usw.

    Weiss aber leider nicht wie ich das machen kann.

    Kann mir da jemand weiterhelfen?

    Vielen Dank Dirk

    :hilfe2:
     
  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. Jabo

    Jabo Aufgabe ohne Minister

    Dabei seit:
    12.10.2006
    Beiträge:
    1.322
    Zustimmungen:
    0
    Ort:
    Hamburg
    Code:
    sed -i 's/\bJan\b/01/' test.txt
    
    wäre ein Vorschlag. Das ersetzt ein alleine stehendes "Jan" durch "01" in einer Zeile wie "ab Jan Monat Januar", läßt das Wort "Januar" aber heile.
     
  4. #3 Gott_in_schwarz, 05.03.2008
    Zuletzt bearbeitet: 05.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    mit date: (geht aber nur mit einem datum pro zeile und auch nur mit den drei-buchstaben monatskürzeln (respektive es geht schon (wie man nachher auch im perlskript sieht) den "ganzen" (englischen) monatsnamen, aber dafür war ich jetzt mal zu "faul"...))
    Code:
    #!/bin/bash
    
    while read line; do
        month=$(echo $line|egrep -io '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)')
        digitMonth=$(date -d"1${month}2000" +%m)
        echo $line|sed -e "s/$month/$digitMonth/g"
    done
    wobei man das umändern kann, wenns wirklich immer genau die dritte zeile der datei ist:
    Code:
    #!/bin/bash
    
    INFILE=$1 # du musst den dateinamen als erstes argument übergeben
    
    month=$(sed -ne '3p' $INFILE|egrep -io '(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)')
    digitMonth=$(date -d"1${month}2000" +%m)
    sed -e "3s/$month/$digitMonth/g" $INFILE
    
    also das erste kann(/muss/sollte) man in einer pipe verwenden, das zweite kannst(/musst) du "alleine" aufrufen, musst allerdings den dateinamen der zu verändernden datei als ersten parameter mit angeben.
    ODER, wenn man nichts anderes zu tun hat hier eine lösung in perl:
    Code:
    #!/usr/bin/env perl
    
    my %monthHash = (   'Jan(uary)?'    =>  '01',
                        'Feb(ruary)?'   =>  '02',
                        'Mar(ch)?'      =>  '03',
                        'Apr(il)?'      =>  '04',
                        'May'           =>  '05',
                        'June?'         =>  '06',
                        'July?'         =>  '07',
                        'Aug(ust)?'     =>  '08',
                        'Sep(tember)?'  =>  '09',
                        'Oct(ober)?'    =>  '10',
                        'Nov(ember)?'   =>  '11',
                        'Dec(ember)?'   =>  '12');
    
    while(my $inp = <STDIN>)
    {
        foreach my $mon (keys(%monthHash))
        {
            if ($inp =~ /$mon/i) {$inp =~ s/$mon/$monthHash{$mon}/ig}
        }
        print "$inp";
    }
    (woraus man schließen kann wieviel ich ungefähr zu tun hab...)

    edit: wobei halt die frage ist, wie "bullet-proof" die regexes beispielsweise sein müssen. ich bin mal davon ausgegangen, dass in der zeile nicht sonderlich viel mehr außer dem monat(skürzel) steht. also probier meine sachen lieber nicht mit zeilen wie:
    mein perl-skript würde daraus folgendes machen:
    wie jabo angemerkt hat wäre word boundaries mitmatchen da eine idee um dieses problem zu umgehen.
     
Thema:

Zeichen ersetzen in einer Datei??

Die Seite wird geladen...

Zeichen ersetzen in einer Datei?? - Ähnliche Themen

  1. 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...
  2. sed und * als zeichen zum ersetzen statt als platzhalter

    sed und * als zeichen zum ersetzen statt als platzhalter: ich steh gerade vor folgendem problem: ich möchte in einer config datei das folgende #*.* /var/log/alldurch *.*...
  3. Zeichen ersetzen und mit Leerzeichen auffüllen

    Zeichen ersetzen und mit Leerzeichen auffüllen: Hallo Leute, ich benötige mal kurz Eure Unterstützung. Ich habe eine Datei mit folgendem Inhalt, hier ab Spaltenposition 75, das Feld muss eine...
  4. Problem beim ersetzen von Zeichen im String

    Problem beim ersetzen von Zeichen im String: Also üeberall im String wo ein Punkt vorkommt soll dieser durch das letzte ergebnis ersetzt werden. Allerdings ersetzt er nur den ersten richtig...
  5. Leerzeichen durch "_" ersetzen

    Leerzeichen durch "_" ersetzen: Hi, ich sitze seit 5min an einen total trivialen Problem. Ich möchte im Inhalt der Variable $long alle Leerzeichen (" ") durch ein "_"...