[Bash] Problem: Tagesdatum als Variable

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Köter 909, 05.08.2004.

  1. #1 Köter 909, 05.08.2004
    Köter 909

    Köter 909 1 ? "HELLO WORLD":GOTO 1

    Dabei seit:
    05.08.2004
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Köllefornia
    Hallo Leute,

    ich sitze gerade an einem einfachen (Bash-)Skript, das zunächst mal das Tagesdatum in eine Variable übergeben soll, um als nächstes aus einer Log-Datei die Einträge des aktuellen Tages herauszugreppen.

    Die Protokolldatei beginnt mit dem Monatskürzel ("Aug"), gefolgt von einem Leerzeichen, wenn der Tag zweistellig ist ("Aug 10"), bzw. von zwei Leerzeichen, wenn der Tag einstellig ist ("Aug 5").

    Wenn ich die Ausgabe von "date" unmittelbar in eine Datei umleite, entspricht das Ergebnis der Datumsanzeige wie oben beschrieben.

    Lese ich nun diese Datei mit "cat" aus und leite die Ausgabe in eine Variable, ist das Ergbebnis anders (nämlich grundsätzlich mit einem Leerzeichen zwischen Datumskürzel und Tag, wodurch das Suchmuster natürlich nicht trifft):

    Code:
    #!/bin/bash
    
    date +%b" "%e > datum
    cat datum
    
    # Ergibt: Aug  5 (= 2 Leerzeichen)
    
    export DATUM=`cat datum`
    echo $DATUM
    
    # Ergibt: Aug 5 (= 1 Leerzeichen)
    
    Weiß jemand, warum?
     
  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 bluelupo, 05.08.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi,

    sed -n '/^[0-9]\{1,2\} \{1,2\}'$MONAT'/p' logdatei

    sollte das erledigen was du willst. RegExp sind halt manchmal nicht ganz einfach.

    Erklärung:
    am Anfang Zeile (^) ein oder zwei Ziffern, danach ein oder zwei Leeräume, gefolgt von dem Inhalt der Variablen $MONAT.

    Warum der 'cat' das nicht macht weiss ich leider nicht.
     
  4. #3 bluelupo, 05.08.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    ein egrep geht auch wenn dir sed zu kryptisch ist...
    egrep '^[0-9]{1,2} {1,2}$MONAT' logdatei
     
  5. oenone

    oenone Freier Programmierer[Mod]

    Dabei seit:
    22.08.2002
    Beiträge:
    599
    Zustimmungen:
    0
    Ort:
    Mannheim
    hm.. scheint ein sh problem zu sein.. mit zsh tritt dies phaenomen nicht auf. mit sh und mit bash allerdings schon.

    auf bald
    oenone
     
  6. #5 Köter 909, 06.08.2004
    Köter 909

    Köter 909 1 ? "HELLO WORLD":GOTO 1

    Dabei seit:
    05.08.2004
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Köllefornia
    Die Logdatei durch den sed zu jagen ist nun wirklich nicht das Problem. ;) Wollte eher wissen, warum im zweiten Fall das zweite Leerzeichen unterdrückt wird.

    Hat sich eh erledigt: es geht, wenn man die Variable in Anführungszeichen setzt.
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 bluelupo, 06.08.2004
    bluelupo

    bluelupo LangLinuxNutzer

    Dabei seit:
    23.11.2003
    Beiträge:
    119
    Zustimmungen:
    0
    Ort:
    Nahe der bayerischen Alpen
    Hi,

    hab mal ein bischen die Shell-Bibel gewälzt.

    Die Lösung scheint die vordefinierte SHELL-Variable IFS (Internal Field Seperator). Die steht auf einen Leerzeichen/Tab/Neue-Zeile-Zeichen d.h. deine Variable DATUM enthält zwei Elemente (Aug und 5) und der Datenfeldtrenner ist EIN Leerzeichen.
     
  9. #7 Köter 909, 06.08.2004
    Köter 909

    Köter 909 1 ? "HELLO WORLD":GOTO 1

    Dabei seit:
    05.08.2004
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Köllefornia
    @bluelupo: Danke!
     
Thema:

[Bash] Problem: Tagesdatum als Variable

Die Seite wird geladen...

[Bash] Problem: Tagesdatum als Variable - Ähnliche Themen

  1. Debug Modus [Bash]

    Debug Modus [Bash]: Huhu, mach ich gleich noch ein Thread, nachdem mir so gut und schnell geholfen wurde :) Also, ich will nun ein Debug Modus machen, daher ich...
  2. [bash] Verzeichnisse rekursiv durchlaufren?

    [bash] Verzeichnisse rekursiv durchlaufren?: Hallo zusammen, ich versuche mir zur Zeit mit ein paar (Bash)Scripts einen *sicheren* Backupscript zu schreiben. Dazu müsste ich ein Verzeichniss...
  3. Zeilen bis zum Wort XXXX löschen [Bash]

    Zeilen bis zum Wort XXXX löschen [Bash]: Hallo, Gibt es eine Möglichkeit alle Zeilen in einer Textdatei bis zu einem bestimmten Wort oder einer bestimmten Zeilen Nummer zu löschen?...
  4. [bash] mehrzeilige Rückgabe auswerten

    [bash] mehrzeilige Rückgabe auswerten: Hi also ein grep-befehl bringt folgende rückgabe: /bla/blubb/bling.10.txt:SUCHBEGRIFF WERT /bla/blubb/bling.2.txt:SUCHBEGRIFF WERT...
  5. [bash] if-Abfrage mit RegEx

    [bash] if-Abfrage mit RegEx: Hallo, ich möchte in einem Bash-Skript prüfen, ob die an das Skript übergebene Variable "src_ip" eine IPv4-Adresse ist. Eine detaillierte...