tool για διευκόλυνση σύνταξης bash one-liners που επεξεργάζονται κείμενο (grep, sed, awk, sort ...)

Giorgos Keramidas keramida at ceid.upatras.gr
Tue Dec 1 17:41:41 EET 2009


On Tue, 1 Dec 2009 16:32:59 +0200, Nick Demou <ndemou at gmail.com> wrote:
> μια φορά στο τόσο γράφω τερατάκια σαν αυτό:
>
> grep 911456 * | grep -v "<tt>" |  grep "<dt>" | sed -e "s/^.*<dt>//"
> -e "s/<\/dt>.*<f>[^:]*sp:/ ; /" -e "s/#.*<t>[^:]*sp:/ ; /" -e
> "s/#.*<ts>/ ; /" -e "s/<\/ts>.*$//"| sed -e
> "s/\([^;]*\);\([^;]*\);\([^;]*\);\([^;]*\)/ \4 ; \2; \3; \1/" | sort |
> uniq -c | sort -nr
>
> δηλαδή απλές κατά βάση εντολές που παίρνουν text input και το
> επεξεργάζονται η μία μετά την άλλη. Παρότι οι επί μέρους εντολές είναι
> απλές μετά από ένα σημείο είναι λογικό να χάνεις την μπάλα και να
> προχωράς μέχρι την ολοκλήρωση του one-liner αργά και βασανιστικά.

Μην τα γράφεις έτσι.  Δεν είναι υποχρεωτικό να είναι ΜΙΑ γραμμή.  Εγώ
προτιμώ κάτι σαν το εξής ας πούμε (ναι γράφω με το χέρι τα continuation
backslash):

    grep 911456 * | grep -v "<tt>" |  grep "<dt>" | \
        sed -e "s/^.*<dt>//" -e "s/<\/dt>.*<f>[^:]*sp:/ ; /" \
            -e "s/#.*<t>[^:]*sp:/ ; /" -e "s/#.*<ts>/ ; /" \
            -e "s/<\/ts>.*$//" | \
        sed -e "s/\([^;]*\);\([^;]*\);\([^;]*\);\([^;]*\)/ \4 ; \2; \3; \1/" | \
        sort | uniq -c | sort -nr

Syntax highlighting δεν έχει το prompt του bash, αλλά όταν ανακαλείς την
ίδια εντολή από το ιστορικό _έχει_ τα newlines που είχες δώσει αρχικά.

ΥΓ: Προσωπικά με βοηθάει επίσης να έχω τα editing features του Emacs,
οπότε πολλές φορές ανοίγω shell *μέσα* από το Emacs με `M-x shell',
ακριβώς για να μπορώ να μετακινηθώ εύκολα, γρήγορα και με πιο βολικό
τρόπο σε μέρη μιας εντολής που είναι κάπως μεγάλη.

ΥΓ2: http://www.codinghorror.com/blog/archives/001311.html



More information about the Linux-greek-users mailing list