[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bashscripting



Andreas Pakulat <apaku@gmx.de> writes:

> On 07.Apr 2005 - 13:35:04, Bruno Hertz wrote:
>> Andreas Pakulat <apaku@gmx.de> writes:
>> > On 07.Apr 2005 - 04:06:11, Bruno Hertz wrote:
>> >> Andreas Pakulat <apaku@gmx.de> writes:
>> >> >             | sed -e "s&/cur$&&" \
>> >> >                   -e "s/ /\\\ /g" \
>> >> >                   -e 's&^\(.*\)$&"\1"&' \
>> >> > 		  -e "/$(date +.%Y-%m)/ p" \
>> >> > 		  -e '/.[0-9]\{4\}-[0-9]\{2\}/ ! p' \
>> >> > 		  -n \
>> 
>> Hast recht, sieht gar nicht so schlecht aus bei zweitem Hinsehen.
>> Vielleicht würde ich noch das Ausschluss-Pattern an den Anfang stellen,
>> und bei match ein 'd' machen, für next cycle, ähnlich wie continue in
>> while Schleifen. Damit sparst du dir die ganzen Replacements wo sie nicht
>> nötig sind. Aber viel macht das natürlich auch nicht aus solange der
>> Input mengenmässig überschaubar ist. Hauptsache du bist zufrieden ...
>
> Kannst du mir mal nen kleinen Tipp geben? Das Problem ist nämlich, ich
> habe Ordner die heissen
>
> bla.fasel
>
> und welche die heissen
>
> bla.fasel.YYYY-MM
>
> für ML's. So, wenn ich man sed richtig verstehe (und dich), meinst du
> ich soll die Zeile
>
> -e '(.[0-9]\{4\}-[0-9]\{2\}/ !p'
>
> durch 
>
> -e '(.[0-9]\{4\}-[0-9]\{2\}/ d'
>
> ersetzen? Dann würde er aber auch die erwünschten ML-Ordner dieses
> Monats aussortieren. Ich will aber nur die ML-Ordner die nicht für
> diesen Monat sind aussortieren...
>
> Wenn ich nun aber -e '$(date ...)/ n' mache, um zuerst diese
> reinzubekommen und danach die obige Zeile mit 'd' matche, dann werden
> die nicht weiter bearbeitet (cur entfernt usw.)

Schon klar. Wie gesagt hatte ich kein Bild wie dein Input aussieht, aber
jetzt ist es etwas klarer.

Das Problem wäre natürlich am besten gelöst mit einem 'and' von regexps,
was aber (afaik) in sed nicht geht. Der Guru ;) hat aber natürlich immer
was in petto, nämlich einen Branch wie z.B. in 

 sed \
    -e "/$(date +.%Y-%m)/ b good" \
    -e '/.[0-9]\{4\}-[0-9]\{2\}/ d' \
    -e ':good' \
    -e "s&/cur$&&" \
    -e "s/ /\\\ /g" \
    -e 's&^\(.*\)$&"\1"&' \

D.h. Matches für `date` gehen sofort zu label 'good', alle weiteren
Datum Matches werden deleted, aber 'nicht Datum Matches' gehen durch.

Involviert etwas mehr als ursprünglich angenommen, und zugegebenermaßen
ein Beispiel aus der Fortgeschrittenenklasse, aber immer noch chique.

Das '-n' fällt übrigens damit weg.

Gruss, Bruno.

PS: das obige branch Kommando ist natürlich eine Remineszenz (oder
Hommage, wenn du willst) an "Johnny B. Good".



Reply to: