Δύο από τα πιο εγκληματικά υποτιμημένα βοηθητικά προγράμματα Linux είναι το Sed και το Awk. Παρόλο που είναι βέβαιο ότι μπορεί να φανεί λίγο θορυβώδες, αν έχετε ποτέ να κάνετε επαναλαμβανόμενες αλλαγές σε μεγάλα κομμάτια κώδικα ή κείμενο ή αν πρέπει να αναλύσετε κάποιο κείμενο, το Sed και το Awk είναι ανεκτίμητα.
Τι είναι λοιπόν; Πώς χρησιμοποιούνται; Και πώς, όταν συνδυάζονται μαζί, καθιστούν ευκολότερη την επεξεργασία κειμένου;
Τι είναι το Sed?
Το Sed αναπτύχθηκε το 1971 στο Bell Labs, από τον θρυλικό πρωτοπόρο υπολογιστών Lee E. McMahon.
Το όνομα σημαίνει επεξεργαστής ρευμάτων, και αυτό είναι που κάνει. Σας επιτρέπει να επεξεργάζεστε προγραμματιστικά σωμάτων ή ρευμάτων του κειμένου, μέσα από μια συμπαγή και απλή αλλά πλήρης γλώσσα προγραμματισμού Turing.
Ο τρόπος με τον οποίο λειτουργεί είναι απλός: διαβάζει κείμενο, γραμμωμένα σε γραμμή σε buffer. Για κάθε γραμμή, θα εκτελέσει τις προκαθορισμένες οδηγίες, όπου χρειάζεται.
Για παράδειγμα, εάν κάποιος έπρεπε να γράψει ένα σενάριο Sed που αντικατέστησε τη λέξη "μπύρα" με "σόδα" και στη συνέχεια πέρασε σε ένα αρχείο κειμένου που περιείχε όλους τους στίχους σε "99 μπουκάλια μπύρας στον τοίχο" μέσω αυτού του αρχείου σε γραμμή γραμμής, και να εκτυπώσετε "99 μπουκάλια σόδα στον τοίχο", και ούτω καθεξής.
Το πιο βασικό script Sed είναι ένα Hello World. Εδώ, χρησιμοποιούμε το βοηθητικό πρόγραμμα Unix Echo, το οποίο απλά παράγει χορδές, για να εκτυπώσετε το "Hello World". Αλλά το κάνουμε αυτό στο Sed και το λέμε να αντικαταστήσει το "World" με το "Dave". Αυτό-επεξηγηματικό υλικό.
echo "Hello World" sed / κόσμο / Dave
Μπορείτε επίσης να συνδυάσετε τις οδηγίες Sed σε αρχεία, αν χρειάζεται να κάνετε κάποια πιο περίπλοκη επεξεργασία. Εμπνευσμένο από αυτό το ξεκαρδιστικό νήμα του Reddit, θα πάρω τους στίχους στο A-Ha's Take On Me και θα αντικαταστήσω κάθε στιγμιότυπο του "I", "Me" και "My", με τον Greg.
Κατ 'αρχάς, θα βάλω τους στίχους στο τραγούδι σε ένα αρχείο κειμένου που ονομάζεται tom.txt . Τότε θα ανοίξω τον προτιμώμενο επεξεργαστή κειμένων μου (το αγαπημένο μου είναι Vim Οι κορυφαίοι 7 λόγοι για να δώσω τον επεξεργαστή κειμένου Vim Μια πιθανότητα Οι κορυφαίοι 7 λόγοι για να δώσω στον επεξεργαστή κειμένου Vim μια πιθανότητα Για χρόνια, έχω δοκιμάσει ένα πρόγραμμα επεξεργασίας κειμένου μετά Ένα άλλο, το όνομα, το δοκίμασα, χρησιμοποίησα κάθε έναν από αυτούς τους εκδότες για πάνω από δύο μήνες ως κύριο συντάκτη της ημέρας ... Μέχρι τώρα ... Διαβάστε περισσότερα, αλλά Nano nano εναντίον vim: Terminal Σύνταξη κειμένων σε σύγκριση με το nano vs. vim: Σύγκριση του επεξεργαστή κειμένου τερματικού Αν και το Linux έχει καταστεί αρκετά εύκολο για σχεδόν οποιονδήποτε να χρησιμοποιήσει χωρίς να χρειαστεί ποτέ να χρησιμοποιήσει τον τερματικό, υπάρχουν μερικοί από εμάς που τα χρησιμοποιούν τακτικά ή είναι περίεργοι για το πώς μπορεί κάποιος να ελέγξει. Διαβάστε περισσότερα και Gedit gedit: Ένας από τους πιο επεξεργασμένους συντάκτες κειμένου [Linux & Windows] Ένα από τα πιο επεξεργασμένα κείμενα απλού κειμένου [Linux & Windows] Όταν σκέφτεστε τους συντάκτες απλού κειμένου, το πρώτο πράγμα που μπορεί να εμφανιστεί στο κεφάλι σας είναι η εφαρμογή των Windows Notepad - απλά χαρακτηριστικά για ένα απλό κείμενο ... Διαβάστε περισσότερα είναι και οι δύο εξαιρετικές επιλογές), και προσθέστε τις ακόλουθες γραμμές. Βεβαιωθείτε ότι το αρχείο που δημιουργείτε τελειώνει με .sed.
Ενδέχεται να παρατηρήσετε ότι στο παραπάνω παράδειγμα επαναλαμβάνω τον εαυτό μου (π.χ. s / me / Greg / and s / Me / Greg /). Αυτό συμβαίνει επειδή μερικές εκδόσεις του Sed, όπως αυτή που συνοδεύει το Mac OS X, δεν υποστηρίζουν την αντιστοίχιση ανύπαρκτων χαρακτήρων. Ως αποτέλεσμα, πρέπει να γράψουμε δύο οδηγίες Sed για κάθε λέξη, έτσι αναγνωρίζει την κεφαλαία και την μη κεφαλαιοποιημένη έκδοση.
Αυτό δεν θα λειτουργήσει τέλεια, σαν να αντικαταστήσατε κάθε φορά το "I", "Me" και "My" με το χέρι. Θυμηθείτε, το χρησιμοποιούμε μόνο ως μια άσκηση για να δείξετε πώς μπορείτε να ομαδοποιήσετε τις οδηγίες Sed σε μια δέσμη ενεργειών και στη συνέχεια να τις εκτελέσετε με μία μόνο εντολή.
Στη συνέχεια, πρέπει να επικαλεστούμε το αρχείο. Για να γίνει αυτό, τρέχουμε αυτήν την εντολή.
cat tom.txt | sed -f greg.sed
Ας επιβραδύνουμε και κοιτάμε τι κάνει αυτό. Οι αναγνώστες Eagle-eyed θα έχουν παρατηρήσει ότι δεν χρησιμοποιούμε την Echo εδώ. Χρησιμοποιούμε το Cat. Αυτό συμβαίνει επειδή ενώ η Cat θα εκτυπώσει ολόκληρο το περιεχόμενο του αρχείου, η echo θα εκτυπώσει μόνο το όνομα του αρχείου. Θα έχετε επίσης παρατηρήσει ότι τρέχουμε Sed με τη σημαία "-f". Αυτό το λέει για να ανοίξει το σενάριο ως αρχείο.
Το τελικό αποτέλεσμα είναι αυτό.
Αξίζει επίσης να σημειωθεί ότι το Sed υποστηρίζει τις κανονικές εκφράσεις (REGEX). Αυτά σας επιτρέπουν να ορίσετε μοτίβα στο κείμενο, χρησιμοποιώντας μια ειδική και σύνθετη σύνταξη.
Ακολουθεί ένα παράδειγμα αυτού που θα μπορούσε να λειτουργήσει. Πάμε να πάρουμε τους προαναφερθέντες στίχους τραγουδιού, αλλά χρησιμοποιήστε το regex για να εκτυπώσετε κάθε γραμμή που δεν ξεκινά με το "Take".
cat tom.txt | sed / ^ Take / d
Το Sed είναι φυσικά εξαιρετικά χρήσιμο. Αλλά είναι ακόμα πιο ισχυρό όταν συνδυάζεται με Awk.
Τι είναι Awk;
Το Awk, όπως το Sed, είναι μια γλώσσα προγραμματισμού σχεδιασμένη για να ασχολείται με μεγάλα σώματα κειμένου. Αλλά ενώ το Sed χρησιμοποιείται για την επεξεργασία και την τροποποίηση κειμένου, το Awk χρησιμοποιείται ως εργαλείο για την ανάλυση και την αναφορά .
Όπως και το Sed, ο Awk αναπτύχθηκε για πρώτη φορά στα Bell Labs στη δεκαετία του 1970. Το όνομά του δεν προέρχεται από αυτό που κάνει το πρόγραμμα, αλλά από τα επώνυμα όλων των συγγραφέων - Alfred Aho, Peter Weinberger και Brian Kernaghan.
Awk λειτουργεί με την ανάγνωση ενός αρχείου κειμένου ή μιας ροής εισόδου μία γραμμή τη φορά. Κάθε γραμμή έχει σαρωθεί για να δει αν ταιριάζει με ένα προκαθορισμένο μοτίβο. Αν βρεθεί μια αντιστοίχιση, εκτελείται μια ενέργεια.
Αλλά ενώ οι Sed και Awk μοιράζονται παρόμοιους σκοπούς, είναι δύο τελείως διαφορετικές γλώσσες, με δύο τελείως διαφορετικές φιλοσοφίες σχεδιασμού. Awk μοιάζει περισσότερο με ορισμένες γλώσσες γενικής χρήσης Πώς να επιλέξετε μια γλώσσα προγραμματισμού για να μάθετε σήμερα και να πάρετε μια εξαιρετική δουλειά σε 2 χρόνια Πώς να επιλέξετε μια γλώσσα προγραμματισμού για να μάθετε σήμερα και να πάρετε μια εξαιρετική δουλειά μέσα σε 2 χρόνια Μπορεί να χρειαστούν χρόνια αφοσιωμένων εργασιών για να να γίνει ένας πραγματικά καλός προγραμματιστής. έτσι υπάρχει ένας τρόπος να επιλέξουμε τη σωστή γλώσσα για να ξεκινήσουμε από σήμερα, για να μπορέσουμε να προσληφθούμε αύριο; Διαβάστε περισσότερα, όπως C, Python και Bash. Έχει πράγματα όπως λειτουργίες και μια πιο C-like προσέγγιση σε πράγματα όπως επανάληψη και μεταβλητές (ο James Bruce εξήγησε πώς λειτουργεί η επανάληψη Τα απόλυτα βασικά του προγραμματισμού για αρχάριους (Μέρος 2) Τα απόλυτα βασικά του προγραμματισμού για αρχάριους (Μέρος 2) εν μέρει 2 από τους απόλυτους οδηγούς μας για τον προγραμματισμό, θα καλύψω τα βασικά των λειτουργιών, τις τιμές επιστροφής, τους βρόχους και τα conditionals. Βεβαιωθείτε ότι έχετε διαβάσει το μέρος 1 πριν αντιμετωπίσετε αυτό, όπου εξήγησα ... Διαβάστε περισσότερα). Απλά, μοιάζει περισσότερο με μια γλώσσα προγραμματισμού.
Ας το δοκιμάσουμε. Χρησιμοποιώντας τους στίχους για να παίρνετε επάνω μου, πρόκειται να εκτυπώσουμε όλες τις γραμμές που είναι πάνω από 20 χαρακτήρες.
awk 'μήκος ($ 0)> 80' tom.txt
Το επόμενο παράδειγμα που έχω κλέψει από την επίσημη τεκμηρίωση του Awk. Αλλά είναι ένα εξαιρετικό παράδειγμα της δυνατότητας αυτής της ισχυρής, αλλά μικροσκοπικής γλώσσας. Είναι επίσης μια μεγάλη επίδειξη για το πώς λειτουργούν πράγματα όπως η επανάληψη και οι μεταβλητές. Αρχικά, δημιουργήστε ένα αρχείο που ονομάζεται "WordCount.awk" και προσθέστε τις ακόλουθες γραμμές.
{για (i = 1; i <= NF; i ++) συχνότητα [$ i] ++}
END {για (λέξη σε συχνότητα) printf "% s \ t% d \ n", λέξη, συχνότητα [λέξη]}
Αποθηκεύστε το και στη συνέχεια εκτελέστε το με την ακόλουθη εντολή.
awk -f WordCount.awk tom.txt
Καλά, σωστά; Ίσως θα παρατηρήσετε ότι δεν είναι σε οποιαδήποτε παραγγελία. Μπορείτε να ταξινομήσετε τα αποτελέσματα χρησιμοποιώντας το βοηθητικό πρόγραμμα ταξινόμησης Unix. Αλλά θα το αφήσουμε για άλλη μια μέρα. Θα το κρατήσουμε απλό.
Συνδυάζοντας τα δύο
Awk και Sed είναι και τα δύο εξαιρετικά ισχυρά όταν συνδυάζονται. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας τους σωλήνες Unix. Αυτά είναι τα "|" bits μεταξύ των εντολών.
Ας προσπαθήσουμε αυτό: Θα περιγράψουμε όλες τις γραμμές στο Take On Me που έχουν περισσότερους από 20 χαρακτήρες, χρησιμοποιώντας το Awk. Στη συνέχεια, θα καταργήσουμε όλες τις γραμμές που αρχίζουν με το "Πάρτε" . Μαζί, όλα μοιάζουν με αυτό:
awk 'μήκος ($ 0)> 20' tom.txt | sed / ^ Take / d
Και παράγει αυτό:
Τώρα ας το γυρίσουμε. Θα ξεκινήσουμε αφαιρώντας όλες τις γραμμές που ξεκινούν με το Take και μετά τις διοχετεύουμε στο Awk, όπου θα μετρήσουμε πόσες φορές κάθε λέξη εμφανίζεται. Μοιάζει λίγο σαν αυτό:
cat tom.txt | sed / ^ Πάρτε / d | awk -f WordCount.awk
Η δύναμη του Sed και Awk
Υπάρχουν μόνο πολλά που μπορείτε να εξηγήσετε σε ένα μόνο άρθρο. Αλλά ελπίζω να έχω δείξει πόσο ανυπολόγιστα ισχυρό Sed και Awk είναι. Με απλά λόγια, είναι μια μονάδα επεξεργασίας κειμένου.
Λοιπόν, γιατί πρέπει να σας ενδιαφέρει; Λοιπόν, εκτός από το γεγονός ότι ποτέ δεν γνωρίζετε πότε πρέπει να κάνετε προβλέψιμες, επαναλαμβανόμενες αλλαγές σε ένα έγγραφο κειμένου, το Sed και το Awk είναι εξαιρετικά χρήσιμοι για την ανάλυση αρχείων καταγραφής. Αυτό είναι ιδιαίτερα βολικό όταν προσπαθείτε να εντοπίσετε ένα πρόβλημα στο διακομιστή LAMP Signed Up για Web Hosting μόνο για SSH; Μην ανησυχείτε - Εγκαταστήστε εύκολα οποιοδήποτε λογισμικό Ιστού υπογράφηκε για SSH μόνο Web Hosting; Μην ανησυχείτε - Εγκαταστήστε εύκολα οποιοδήποτε λογισμικό Ιστού Δεν γνωρίζετε το πρώτο πράγμα που πρέπει να κάνετε για τη λειτουργία του Linux μέσω της ισχυρής γραμμής εντολών του; Μην ανησυχείτε πια. Διαβάστε περισσότερα ή δείτε τα αρχεία καταγραφής πρόσβασης για να δείτε αν ο διακομιστής σας έχει πειρατωθεί.
Βρήκατε μια ενδιαφέρουσα χρήση για τους Sed και Awk; Υπάρχουν άλλες βοηθητικές εφαρμογές του Linux που θεωρείτε ότι υποτιμάτε; Ενημερώστε μας στα παρακάτω σχόλια και θα συζητήσουμε.