PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Bash] Problem: Tagesdatum als Variable



Köter 909
05.08.2004, 14:05
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):



#!/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?

bluelupo
05.08.2004, 15:48
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.

bluelupo
05.08.2004, 15:58
ein egrep geht auch wenn dir sed zu kryptisch ist...
egrep '^[0-9]{1,2} {1,2}$MONAT' logdatei

oenone
05.08.2004, 18:56
hm.. scheint ein sh problem zu sein.. mit zsh tritt dies phaenomen nicht auf. mit sh und mit bash allerdings schon.

auf bald
oenone

Köter 909
06.08.2004, 10:10
Hi,

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

RegExp sind halt manchmal nicht ganz einfach.

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.

bluelupo
06.08.2004, 13:22
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.

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.

Köter 909
06.08.2004, 16:14
@bluelupo: Danke!