linux-l: Was fuer Perl-Experten?

Jens Dreger jens.dreger at physik.fu-berlin.de
Do Mai 3 12:13:24 CEST 2001


On Wed, May 02, 2001 at 08:33:56PM +0200, Holger Paulsen wrote:
> Mir ist da ein gewisser fauxpas gelungen: ich habe ca. 1000
> Dateien konvertiert und sie landeten dort, wo sie nicht
> hingehörten.
> 
> Um diese Dateien korrekt einzusortieren müßte ich sie erst
> aufbereiten. Das bedeutet:
> 
> - alle Zeilen am Beginn der Datei, die mit einem "<"
>   beginnen, wegschmeißen. Nur diese.
> - alle <A HREF="nnn"> aus der Datei entfernen. nnn steht für
>   eine beliebige Zeichenkette.
> - in der Datei gibt es einen sieben Zeilen langen Block,
>   dessen erste Zeile
>   </UL>
>   und die letzte Zeile
>   <PRE>
>   lautet. Dieser Block soll durch eine Leerzeile ersetzt
>   werden.
> 
> - in der Datei gibt es dann eine Zeile mit dem Inhalt
>   </PRE>
>   Diese Zeile und alle folgenden sind Futter für /dev/null.

Okok, ich sehe schon, ich muss da auch mitmachen. Mein garantiert
unverstaendlicher Vorschlag lautet erstmal:

--------------8<---------------------------------
#!/usr/local/bin/perl -wp -0777
s/<A\s+HREF\s*=\s*".*"\s*>\s*//g;
s|^(<.*\n)*||;
s|</UL>(?:[^\n]*\n){6}<PRE>\s*(.*?)</PRE>.*|$1|s;
--------------8<---------------------------------

Testdatei:

----------------8<-----------------------------
<blah>
<blub>
<suelz>
hier nicht mehr
<A HREF="blah"><A             
HREF="blub"><A HREF=
"suelz" >
whatever1
</PRE>
some text
whatever2
</UL>
1a
2a
3a
4a
<PRE>
</UL>
1b
2b
3b
4b
5b
<PRE>
text<A HREF="blubber">text
</PRE>
a
b
c
d
e
--------------------8<-------------------------

Ergebnis:

dreger at smart:..dreger/belug> ./sample.pl sample.txt 
hier nicht mehr
whatever1
</PRE>
some text
whatever2
</UL>
1a
2a
3a
4a
<PRE>
texttext

Kommt wie von selbst mit so fiesen Sachen wie '<A HREF = 
"blah" >' klar.

Sagte ich schon, dass Perl rockt?

Gruss,

Jens.


PS: Ich bin sicher, dass das Programm nicht tut, was Du willst, aber
das liegt an Deiner ungenauen Spezifikation. Z.B. willst Du bestimmt
auch <a href="sonstwas"> rauswerfen, richtig? "In der Datei gibt es
dann eine Zeile..." ist auch nicht sonderlich exakt. Ich habe Dich mal
beim Wort genommen ;)







Mehr Informationen über die Mailingliste linux-l