per sed bestimmte text stellen löschen?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
toberkel
Beiträge: 155
Registriert: 19.05.2003 08:44:53
Wohnort: Lummerland

per sed bestimmte text stellen löschen?

Beitrag von toberkel » 08.11.2004 09:20:42

hi

ich müsste in den mailboxen der users mails löschen die per imap als gelöscht markiert sind (X-Status: D). das script sucht den anfang und das ende der mail, und falls da dann dieses x-status vorkommt löscht es alles ziwschen anfang und ende. das funktioniert gut, leider nur mit einzelnen dateien. wie bekomme ich sed dazu das ganze /var/spool/mail verzeichniss zu durchsuchen?

der code sieht so aus:

Code: Alles auswählen

%
:t
/From postmaster@<domain>.<tld>/,/---------------------bOuNdArY---------------------/ {
    /---------------------bOuNdArY---------------------/!{
       $!{
          N;
          bt
       }
    }
    /X-Status: D/d;
}
wäre dankbar für eure hilfe..

mfg toberkel
--
Rechtschreibfehler dienen der allgemeinen Belustigung,
und sind daher beabsichtigt.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 08.11.2004 12:49:29

Hab ich das richtig verstanden dass dir eigentlich nur ein

find -type f -exec sed "irgendwelchebefehle" -i {} \;

fehlt?

MfG Peschmà
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

toberkel
Beiträge: 155
Registriert: 19.05.2003 08:44:53
Wohnort: Lummerland

Beitrag von toberkel » 08.11.2004 14:14:19

kann das grad leider nicht testen, ich muss ja sed so aufrufen:
sed -f <script> mailbox >> mailbox damit er den text wieder in die datei schreibt... geht denn der find befehl so? oder gibt es noch eine elegantere möglichkeit?

mfg toberkel
--
Rechtschreibfehler dienen der allgemeinen Belustigung,
und sind daher beabsichtigt.

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 09.11.2004 10:00:48

Ja, das geht dann so:
find -type f -exec sed -f sedscript.sed -i {} \;

Wobei ich davon ausgehe dass dein Sed -i kann ;)
Das Find ruft einfach Sed für jede Datei auf, wobei {} dann durch den Dateinamen ersetzt wird.

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

toberkel
Beiträge: 155
Registriert: 19.05.2003 08:44:53
Wohnort: Lummerland

Beitrag von toberkel » 09.11.2004 11:09:03

das hört sich gut an!

aber leider habe ich ein prob.

wenn ich es so aufrufe: sed -f <script> <mailbox> >> <mailbox> sollte es ja in der selben mailbox landen, aber es wird nichts ersetzt.

wenn ich aber sed -f <script> <mailbox> >> <mailbox2> mache, dann geht es...

mfg toberkel
--
Rechtschreibfehler dienen der allgemeinen Belustigung,
und sind daher beabsichtigt.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 10.11.2004 15:21:30

Hi,

wie waer's denn mit:

Code: Alles auswählen

for datei in /var/spool/mail/*
do
  mv $datei $.datei.sic
  sed -f <script> $datei.sic >> $datei
done
Dann hast du die alte Version nach der Aenderung immer noch, oder du setzt hier noch ein rm ein.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Antworten