[Bash] Problem: Tagesdatum als Variable

K

Köter 909

1 ? "HELLO WORLD":GOTO 1
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?
 
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.
 
ein egrep geht auch wenn dir sed zu kryptisch ist...
egrep '^[0-9]{1,2} {1,2}$MONAT' logdatei
 
hm.. scheint ein sh problem zu sein.. mit zsh tritt dies phaenomen nicht auf. mit sh und mit bash allerdings schon.

auf bald
oenone
 
bluelupo schrieb:
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.
 
Köter 909 schrieb:
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.
 

Ähnliche Themen

tar network backup problem

Problem mit Bash Script

mysqldump script -> Variablen Problem

Zurück
Oben