Ο οριστικός οδηγός μονογραμμικών Perl#

Ένα μονόγραμμο Perl είναι ένα πλήρες πρόγραμμα που δίνεται ως όρισμα στο pperl -e-E) και εκτελείται απευθείας από το κέλυφος. Καταλαμβάνει την ίδια θέση με τα awk, sed και τις εκ των ενόντων σωληνώσεις κελύφους, με πλουσιότερη μηχανή regex, πλήρη τυπική βιβλιοθήκη και τη δυνατότητα να εξελιχθεί σε πραγματικό σενάριο τη στιγμή που μία γραμμή πάψει να αρκεί.

Ο οδηγός αυτός απευθύνεται σε χρήστη του κελύφους Linux που ήδη συνθέτει σωληνώσεις grep/sed/awk/xargs και έχει γράψει ένα-δυο μικρά σενάρια Perl. Διδάσκει την επιφάνεια της γραμμής εντολών από άκρη σε άκρη: τις σημαίες, έναν προοδευτικό κατάλογο συνταγών, μετασχηματισμούς οδηγούμενους από regex, αριθμητική δουλειά, πώς να τυλίξετε συνταγές σε επαναχρησιμοποιήσιμα ψευδώνυμα κελύφους, και τις παγίδες που στοιχίζουν χρόνο.

Το εκτελέσιμο είναι το pperl. Κάθε παράδειγμα στον οδηγό αυτόν αντιγράφεται και επικολλάται απευθείας σε κέλυφος Linux. Το pperl είναι υλοποίηση της Perl 5 σε Rust· η διεπαφή γραμμής εντολών του ταυτίζεται με την Perl 5.42.

Ποιο κεφάλαιο θέλω;#

Θέλετε να …

Ξεκινήστε εδώ

Μάθετε τι κάνει κάθε σημαία (-n, -p, -a, …)

switches

Περιηγηθείτε σε συνταγές από τετριμμένες αντικαταστάσεις έως αναγωγές δεδομένων

progression

Ταιριάξτε, εξαγάγετε ή ξαναγράψτε κείμενο με regexps

regex-recipes

Άθροισμα, μέσος όρος, παραγωγή πρώτων, μετατροπή IP, αριθμητική ημερομηνιών

numeric

Μετατρέψτε ένα μονόγραμμο σε επαναχρησιμοποιήσιμη συνάρτηση ή ψευδώνυμο κελύφους

aliases

Αποσφαλματώστε εισαγωγικά, κωδικοποίηση, επιτόπιες επεξεργασίες και εκπλήξεις με τον διαχωριστή εγγραφών

gotchas

Τα τρία επίπεδα του οδηγού#

  • Προσανατολισμός - η σελίδα αυτή.

  • Εργαζόμενος προγραμματιστής - τα έξι κεφάλαια παραπάνω. Καθένα στέκει αυτόνομο· περιδιαβείτε όσα σχετίζονται με το τρέχον πρόβλημά σας.

  • Βαθιά αναφορά - ο συμπυκνωμένος πίνακας σημαιών/μεταβλητών στο τέλος του switches.

Δύο παραδείγματα πριν ξεκινήσετε#

Ένας χρήστης sed/awk που διαβάζει αυτόν τον οδηγό θέλει να δει τι του προσφέρει ένα μονόγραμμο. Δύο επιδείξεις.

Άθροιση των αριθμών στην τελευταία στήλη ενός αρχείου χωρισμένου με λευκούς χαρακτήρες#

pperl -lane '$s += $F[-1]; END { print $s }' data.txt

Το -l κάνει chomp τους χαρακτήρες αλλαγής γραμμής εισόδου και προσθέτει έναν στην έξοδο. Το -a διασπά κάθε γραμμή στο @F. Το -n τυλίγει το πρόγραμμα σε έναν σιωπηρό βρόχο ανάγνωσης. Το $F[-1] είναι η τελευταία στήλη. Το END { } εκτελείται μία φορά αφού εξαντληθεί η είσοδος. Χωρίς προσωρινό αρχείο, χωρίς awk 'BEGIN{…}END{…}', χωρίς συμβατικό πλαίσιο.

Εξαγωγή κάθε μοναδικής διεύθυνσης IPv4 από αρχείο καταγραφής, με τις πιο πρόσφατες πρώτες#

pperl -lne 'print for /\b(?:\d{1,3}\.){3}\d{1,3}\b/g' access.log \
  | awk '!seen[$0]++'

Το μονόγραμμο αναλαμβάνει το δύσκολο μέρος (την εύρεση όλων των αντιστοιχιών ανά γραμμή, όχι μόνο της πρώτης), το awk κρατά την πρώτη εμφάνιση καθεμίας. Γραμμένα ως δύο σύντομα εργαλεία, καθένα που κάνει μία δουλειά - αυτός είναι ο τρόπος εργασίας αυτού του οδηγού.

Διαβάστε με αυτή τη σειρά στην πρώτη ανάγνωση#

  1. switches - το λεξιλόγιο.

  2. progression - οι συνταγές, ταξινομημένες κατά δυσκολία.

  3. regex-recipes, numeric - εφαρμοσμένα κομμάτια.

  4. aliases - μεταφορά όσων χρησιμοποιείτε καθημερινά σε συναρτήσεις κελύφους.

  5. gotchas - οι παγίδες, μόλις τις συναντήσετε.

Σε μεταγενέστερες αναγνώσεις, πηγαίνετε απευθείας στο κεφάλαιο που ονοματίζει το πρόβλημα που έχετε στα χέρια σας.

Βιβλιογραφία#

Ο οδηγός αυτός δεν προέρχεται από ένα μόνο βιβλίο. Ερευνήθηκε όπως θα ερευνούσε το θέμα ένας τεχνικός συγγραφέας - perldoc, τεκμηρίωση αρθρωμάτων CPAN, ομιλίες συνεδρίων, αναρτήσεις ιστολογίων, αρχεία λιστών αλληλογραφίας και τα βιβλία που παρατίθενται παρακάτω - και στη συνέχεια αποστάχθηκε σε αρκετά περάσματα: αφαιρώντας αναφορές σε εργαλεία και εκδόσεις που κανείς πια δεν τρέχει, συμπτύσσοντας την ίδια συμβουλή που επαναλαμβάνεται από διαφορετικούς συγγραφείς σε μία διατύπωση, και συγχωνεύοντας πολλαπλές μερικές πραγματεύσεις ενός θέματος σε μία πλήρη πραγμάτευση. Το αποτέλεσμα καλύπτει περισσότερο έδαφος από οποιαδήποτε μεμονωμένη πηγή που συμβουλευτήκαμε, επειδή καμία μεμονωμένη πηγή δεν καλύπτει όλο το πεδίο. Είναι επίσης πυκνότερα διασυνδεδεμένος από οποιαδήποτε από αυτές: όταν το κεφάλαιο των regex αγγίζει κάτι που ο οδηγός regex εξηγεί ήδη σε βάθος, αυτό απέχει ένα κλικ - όχι ένα κεφάλαιο που πρέπει να βρείτε μόνοι σας σε άλλο τόμο.

Τα δύο βιβλία παρακάτω είναι οι πλησιέστεροι δημοσιευμένοι σύντροφοι σε έντυπη μορφή. Αγοράστε τα αν το ιδίωμα των μονογραμμικών είναι καθημερινό εργαλείο για εσάς και θέλετε μια έντυπη αναφορά στο ράφι.

  • Peteris Krumins, Perl One-Liners: 130 Programs That Get Things Done, No Starch Press, 2014.

  • Sundeep Agarwal, Perl One-Liners Guide (learnbyexample), 2023.