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

Nick Demou ndemou at gmail.com
Tue Dec 1 22:30:21 EET 2009


2009/12/1 Giorgos Keramidas <keramida at ceid.upatras.gr>:
> 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

και γω το προτιμώ αυτό το στυλ αλλά συνήθως τέτοια τερατάκια τα
γράφεις μετά από μια τηλεφωνική συζήτηση σαν αυτή και όχι με ησυχία
και όρεξη για να γράψεις τον Σωστό Κώδικα:

 - κολλητός/πελάτης: Νίκο πρέπει να μου δώσεις όσο πιο γρήγορα γίνεται
μια λίστα όλων των μη ουλεριανών υπερ-εκφράσεων που βρίσκονται στα
text files με μέγεθος μεγαλύτερο του 2pi+j του server μας
 - Νίκος: να πας να πνιγείς [για την ακρίβεια το λέω λίγο πιο σκληρά
γιατί είναι κολλητός]
 - κολλητός: το ξέρω ότι μόνο εσύ μπορείς να το κάνεις αυτό... [κάτι
σαν λυγμός ακούγεται στο βάθος]... αν δεν το κάνεις θα χάσω έναν πολύ
καλό πελάτη...
 - Νίκος: [ξεφύσημα]... άντε καλά
 - κολλητός: σε πόσα λεπτά?
 - Νίκος: να πας να πνιγείς

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

??? τι εννοείς? -- εγώ βλέπω αυτό:
# ls |\
> tail -n1
Πρότυπα
# !!
ls |tail -n1    <--- που είναι τα new lines?
Πρότυπα

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

νομίζω πως μετά τα 40 είναι αδύνατον να μάθω emacs :| (όχι ότι τα
κατάφερα λίγο νωρίτερα)

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

LOL... πάντως έχω πολύ καλή δικαιολογία που πάρσαρα xml με regexs  :)


More information about the Linux-greek-users mailing list