Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
bash pattern matching

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Chupi
Gast





BeitragVerfasst am: 25. Jul 2003 11:32   Titel: bash pattern matching

hi
kann mir jemand sagen, wie ich folgendes anstelle?
nehmen wir an, ich hab folgende log-files:

log123.456.789.AZT.log
log172.333.112.AZT.log
log340.112.236.AZT.log

nun will ich alle, ausser dem, dass eine 456 in seinem namen hat löschen. (456 hintereinander!)

bash$ rm log*[!456]* --> klappt nicht
bash$ rm log*!(456)* --> auch nicht

klar kann man das mit find oder awk usw. machen, aber mich nimmts wunder, obs auch mit der bash funktioniert.
jemand ne ahnung?
 

max



Anmeldungsdatum: 14.05.2000
Beiträge: 806
Wohnort: Ruhrpott

BeitragVerfasst am: 25. Jul 2003 12:06   Titel: Re: bash pattern matching

habe da auch immer meine Problemchen mit RegEx in der bash *Kriegsfuß*
aber sollte es nicht .* statt * und ![456] statt [!456] heißen?
Max
 
Benutzer-Profile anzeigen Private Nachricht senden

chupi
Gast





BeitragVerfasst am: 25. Jul 2003 13:36   Titel: Re: bash pattern matching

> aber sollte es nicht .* statt * und ![456] statt [!456] heißen?
> Max

ne...überhaupt nicht
 

Michael
Gast





BeitragVerfasst am: 25. Jul 2003 13:46   Titel: Re: bash pattern matching

for i in `ls /pfad/* | grep -v 456` ; do rm $i; done

Cheers

Michael
 

Jochen
Gast





BeitragVerfasst am: 26. Jul 2003 12:33   Titel: Re: bash pattern matching

Du warst aber schon nah dran.

log*[!456]* kann nicht funktionieren, da die eckigen Klammern für genau ein Zeichen stehen, welches eines von denen in der Zeichenmenge sein darf.

log*!(456)* kommt fast hin, aber das erweiterte Globbing muss erst eingeschaltet werden. Ausserdem muss man dann mit "*" vorsichtig sein, da das ja für eine beliebige Folge beliebiger Zeichen steht - also auch "456"! So funktioniert's:
code:
shopt -s extglob # Extended Globbing einschalten, wird nur einmal benötigt
ls log*.!(456).*



Jochen
 

chupi
Gast





BeitragVerfasst am: 28. Jul 2003 13:00   Titel: Re: bash pattern matching

@michael: ja so funktionierts...ist mir aber zu umständlich. das muss doch einfacher gehen ja?

@jochen: hast du das getestet? ich denke nicht!
 

Michael
Gast





BeitragVerfasst am: 28. Jul 2003 14:14   Titel: Re: bash pattern matching

aus ner Doku:

snip
----
Die eckige Klammer wird ersetzt durch eines der in der Klammer stehenden Zeichen. Auch ein Bereich ist möglich, z. B. [a-k] = [abcdefghijk]. Beispiel: "a[bcd]" wird ersetzt durch "ab", "ac" und "ad". Soll das Minuszeichen selbst in die Zeichenmenge aufgenommen werden, muß es an erster Stelle stehen (gleich nach der öffnenden Klammer).
----
snap

durch eines der
*****

So wie du das geplant hast, wirds nix.

Cheers

Michael
 

Jochen
Gast





BeitragVerfasst am: 28. Jul 2003 14:15   Titel: Re: bash pattern matching

Hoppala. Selbstverständlich habe ich das getestet. Das Feature des Extended Globbings benutze ich eher selten, so dass ich vorsichtshalber solche Sachen immer mal schnell anteste. Also wollte ich gerade mal (ganz entrüstet) per Cut'n'Paste aus der Konsole pasten, wie das bei mir funktioniert. Und sieh mal an - es geht nicht?!? Das Problem war dann auch schnell gefunden: Ich hatte die Dateinamen von Dir nicht 1:1 übernommen. Das !() ist in Kombination mit dem * tückisch... Mea culpa. Wenn irgendwo im Dateinamen zwischen zwei Punkten eine Zeichenfolge steht, die nicht "456" ist, dann ist das für die bash OK, weil die Sterne vorne und hinten alles andere abdecken. Man könnte es aber so schreiben:
ls log!(456).!(456).!(456).AZT.log
Und das funktioniert - ehrlich!

Michael hat einen Hang zum Zuviel-Selber-Machen: Die for-Schleife, um dem rm-Kommando jede Datei einzeln vorzuwerfen, ist überflüssig:
rm `ls /pfad/* | grep -v 456`
tut's auch. Dafür hat seine erste Lösung aber den Vorteil, dass sie funktioniert (im Gegensatz zu meiner ersten Version).

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy