OT: grep help

Alexandros Papadopoulos alexandros.papadopoulos at member.fsf.org
Thu Mar 26 14:12:09 EET 2009


2009/3/25 Giorgos Keramidas <keramida at ceid.upatras.gr>:
> On Wed, 25 Mar 2009 18:29:53 +0000, Alexandros Papadopoulos <alexandros.papadopoulos at member.fsf.org> wrote:
>> Φίλτατοι, τη βοήθειά σας:
>>
>> Έχω ένα μεγάλο αρχείο ASCII (mediawiki database dump), μέσα από το
>> οποίο θέλω να ρουφήξω όλα τα URLs.
>>
>> Ένα απλό grep δε κάνει και πολλά, μιας και επιστρέφει τη "γραμμή", η
>> οποία έχει 500000 χαρακτήρες έκαστη, μπορεί να είναι ολόκληρο άρθρο
>> κτλ... Πώς μπορώ να πω στο grep να βρει όλες τις λέξεις που ξεκινούν
>> από http://blah και να μου επιστρέψει όλα τα matching strings μέχρι το
>> επόμενο space, ώστε να έχω μια ωραία λίστα με τα URLs μόνο?
>
> Τα URIs μπορεί να μην τελειώνουν σε space αλλά σε '\'' ή σε '"'.  Αλλά
> μπορείς, συνήθως να κάνεις θαύματα με μια μικρή παραλλαγή στο sed που
> έδειξε ο Μανώλης.  Προσωπικά την έχω καταβρεί με το '\b' της Perl σε
> κάτι τέτοιες περιπτώσεις:
>
>    $ cat foo
>    <a href="http://foo">bar</a><a href="http://koko">lala</a>
>    $ perl -ne '@m = (/\b(http:[^"'\'']+)/g); print join("\n", @m) . "\n"' <
>    foo
>    http://foo
>    http://koko
>    $

Τα URLs τελειώνουν σε ό,τι να'ναι... το να κοιτάς το dump μιας μεγάλης
mediawiki βάσης πρέπει να είναι εμπειρία εφάμιλλη με το να κοιτάς μέσα
στο στόμα κάποιου που δεν έχει πλύνει τα δόντια του για 20 χρόνια...

Εν πάσει περιπτώσει το script του Γιώργου δουλεύει αρκετά καλά και
επιστρέφει αρκετά "καθαρά" URLs, αλλά και μπόλικα χαοτικά URLs
περιτριγυρισμένα από ό,τι σκουπίδι μπορεί να φανταστεί κανείς!

Παραδείγματα σκουπιδιών:

1. http://omorfo.url.com Related Files] | Return to [[Technology]] ]
blahblahblah
2. http://omorfo.url.com/document-1.9.912639</a></div>\n<div>&nbsp;</div>\n<div>\n<p><em><span>

Γίνεται με κάποια μικρή αλλαγή στο perlόσκριπτο να λογοκριθούν τα σκουπίδια;

Το script του Μανώλη για κάποιο λόγο δεν πράτει τα δέοντα - αλλά
φυσικά έχω μεσάνυχτα από sed και δε μπορώ να κάνω τις απαραίτητες
ρυθμίσεις.

Θα περίμενε κανείς κάτι του στυλ grep -o http://* mysql.dump να
επιστρέψει τα URLs και μόνο μερικά σκουπίδια που είναι κολλημένα στη
δεξιά τους πλευρά, αλλά για κάποιο λόγο δε πλησιάζει καν...

Ευχαριστώ για την ως τώρα βοήθεια!

-Α


More information about the Linux-greek-users mailing list