Εντολή Pipe, Grep και Sort σε Linux/Unix με παραδείγματα

⚡ Έξυπνη Σύνοψη

Εντολές pipe, grep και sort σε Linux και Unix αλυσιδώνουν και φιλτράρουν κείμενο: μια pipe τροφοδοτεί την έξοδο μιας εντολής στην επόμενη, η grep αναζητά μοτίβα και η ταξινόμηση τακτοποιεί γραμμές, ενώ τα φίλτρα μετασχηματίζουν τα δεδομένα μεταξύ τους.

  • 🔗 Σωλήνας: Το σύμβολο σωλήνωσης | μεταδίδει την έξοδο μιας εντολής ως είσοδο στην επόμενη.
  • 📄 Σελίδα: Η διοχέτευση cat σε less, pg ή more εμφανίζει ένα μεγάλο αρχείο μία οθόνη κάθε φορά.
  • 🔍 λαβή: Η εντολή grep αναζητά σε ένα αρχείο γραμμές που ταιριάζουν με μια συμβολοσειρά ή ένα μοτίβο.
  • 🎚️ επιλογές grep: Σημαίες όπως -v, -c, -n, -i και -l αντιστρέφουν, μετρούν, αριθμούν, αγνοούν πεζά-κεφαλαία και παραθέτουν αρχεία.
  • 🔤 είδος: Η εντολή ταξινόμησης ταξινομεί τις γραμμές ενός αρχείου, με -r, -n και -f για αντίστροφη, αριθμητική και χωρίς διάκριση πεζών-κεφαλαίων.
  • 🧪 Φίλτρα: Οι εντολές φιλτραρίσματος όπως grep, sort, awk, sed και wc επεξεργάζονται την διοχετευμένη είσοδο και παράγουν έξοδο.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Οι βοηθοί τεχνητής νοημοσύνης και ο συγκυβερνήτης του GitHub μπορούν να δημιουργήσουν και να εξηγήσουν αγωγούς pipe, grep και sort.

Εντολές Pipe, grep και sort σε Linux και Unix με παραδείγματα

Οι μέθοδοι pipes, grep και sort είναι από τα πιο χρησιμοποιούμενα εργαλεία στο Linux γραμμή εντολών, επειδή σας επιτρέπουν να συνδέσετε μικρές εντολές σε μία ισχυρή ροή εργασίας. Αυτή η σελίδα εξηγεί την καθεμία με λειτουργικά παραδείγματα και στη συνέχεια δείχνει πώς τα φίλτρα τα συνδέουν μεταξύ τους.

Τι είναι το Pipe στο Linux;

Η διοχέτευση (pipe) είναι μια εντολή στο Linux που σας επιτρέπει να χρησιμοποιείτε δύο ή περισσότερες εντολές έτσι ώστε η έξοδος της μίας εντολής να χρησιμεύει ως είσοδος στην επόμενη. Με λίγα λόγια, η έξοδος κάθε διεργασίας τροφοδοτεί απευθείας ως είσοδο στην επόμενη, όπως ένας αγωγός. Το σύμβολο '|' υποδηλώνει έναν αγωγό.

Οι διοχετεύσεις σάς βοηθούν να συνδυάσετε δύο ή περισσότερες εντολές ταυτόχρονα και να τις εκτελέσετε διαδοχικά. Μπορείτε να χρησιμοποιήσετε ισχυρές εντολές που εκτελούν σύνθετες εργασίες σε χρόνο μηδέν.

Ας το καταλάβουμε με ένα παράδειγμα.

Όταν χρησιμοποιείτε την εντολή 'cat' για να προβάλετε ένα αρχείο που εκτείνεται σε πολλές σελίδες, η προτροπή μεταβαίνει γρήγορα στην τελευταία σελίδα του αρχείου και δεν βλέπετε το περιεχόμενο στη μέση.

Για να το αποφύγετε αυτό, μπορείτε να μετατρέψετε την έξοδο της εντολής 'cat' σε 'less', η οποία σας εμφανίζει μόνο ένα μήκος κύλισης περιεχομένου κάθε φορά.

cat filename | less

Ένα παράδειγμα θα το έκανε σαφές. Το παρακάτω διάγραμμα δείχνει πώς ένας αγωγός μεταδίδει την έξοδο μιας εντολής στην επόμενη.

Διάγραμμα ενός αγωγού Linux που μεταδίδει την έξοδο μιας εντολής ως είσοδο στην επόμενη

εντολές 'pg' και 'more'

Αντί για το 'less', μπορείτε επίσης να χρησιμοποιήσετε την εντολή pg ή more:

cat Filename | pg

or

cat Filename | more

Στη συνέχεια, μπορείτε να δείτε το αρχείο σε εύπεπτα τμήματα και να κάνετε κύλιση προς τα κάτω πατώντας απλώς το πλήκτρο Enter. Το παρακάτω στιγμιότυπο οθόνης δείχνει ένα αρχείο με την εντολή more.

Η γάτα διοχετεύτηκε στην εντολή "περισσότερα" σελιδοποιώντας ένα μεγάλο αρχείο, μία οθόνη τη φορά

Η εντολή «grep».

Ας υποθέσουμε ότι θέλετε να αναζητήσετε συγκεκριμένες πληροφορίες, όπως έναν ταχυδρομικό κώδικα, σε ένα αρχείο κειμένου.

Μπορείτε να κάνετε γρήγορη αναζήτηση στο περιεχόμενο μόνοι σας χειροκίνητα tracτις πληροφορίες. Μια καλύτερη επιλογή είναι να χρησιμοποιήσετε το grep εντολή. Σαρώνει το έγγραφο για τις επιθυμητές πληροφορίες και παρουσιάζει το αποτέλεσμα στη μορφή που θέλετε.

Σύνταξη:

grep search_string

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

Η εντολή grep αναζητά στο αρχείο δείγματος τις συμβολοσειρές Apple και Eat

Εδώ, η εντολή grep έχει αναζητήσει στο αρχείο 'sample' τις συμβολοσειρές 'Apple' και 'Eat'. Οι ακόλουθες επιλογές μπορούν να χρησιμοποιηθούν με αυτήν την εντολή.

Επιλογή Λειτουργία
-v Εμφανίζει όλες τις γραμμές που δεν ταιριάζουν με τη συμβολοσειρά που αναζητήσατε
-c Εμφανίζει μόνο τον αριθμό των γραμμών που ταιριάζουν
-n Εμφανίζει τη γραμμή που ταιριάζει και τον αριθμό της
-i Ταιριάζει με κεφαλαία και πεζά γράμματα
-l Εμφανίζει μόνο το όνομα του αρχείου με τη συμβολοσειρά

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

grep -i εκτέλεση αναζήτησης χωρίς διάκριση πεζών-κεφαλαίων για το γράμμα a

Χρησιμοποιώντας την επιλογή '-i', το grep έχει φιλτράρει τη συμβολοσειρά 'a' (χωρίς διάκριση πεζών-κεφαλαίων) από όλες τις γραμμές.

Η εντολή "ταξινόμηση".

Αυτή η εντολή βοηθά στην αλφαβητική ταξινόμηση των περιεχομένων ενός αρχείου.

Η σύνταξη αυτής της εντολής είναι:

sort Filename

Θεωρήστε τα περιεχόμενα ενός αρχείου, που φαίνεται με την cat παρακάτω.

Εντολή cat που εμφανίζει τα μη ταξινομημένα περιεχόμενα του αρχείου abc

Η εκτέλεση της εντολής ταξινόμησης ταξινομεί αυτές τις γραμμές σε αλφαβητική σειρά, όπως φαίνεται παρακάτω.

Εντολή ταξινόμησης που ταξινομεί τα περιεχόμενα του αρχείου abc με αλφαβητική σειρά

Υπάρχουν επίσης επεκτάσεις σε αυτήν την εντολή, οι οποίες παρατίθενται παρακάτω.

Επιλογή Λειτουργία
-r Reverseταξινόμηση
-n Ταξινόμηση αριθμητικά
-f Ταξινόμηση χωρίς διάκριση πεζών-κεφαλαίων

Το παρακάτω παράδειγμα δείχνει την αντίστροφη ταξινόμηση των περιεχομένων στο αρχείο 'abc'.

Εντολή sort -r αντίστροφη ταξινόμηση των περιεχομένων του αρχείου abc

Τι είναι το φίλτρο;

Το Linux έχει πολλές εντολές φιλτραρίσματος όπως awk, grep, sed, spell και wc. Ένα φίλτρο λαμβάνει είσοδο από μία εντολή, κάνει κάποια επεξεργασία και δίνει έξοδο.

Όταν κάνετε pipe δύο εντολές, η «φιλτραρισμένη» έξοδος της πρώτης εντολής δίνεται στην επόμενη. Το παρακάτω διάγραμμα δείχνει πώς ένα φίλτρο εντάσσεται σε μια pipeline.

Διάγραμμα ενός φίλτρου Linux που λαμβάνει δεδομένα εισόδου μέσω αγωγών, τα επεξεργάζεται και παράγει έξοδο

Ας το κατανοήσουμε αυτό με τη βοήθεια ενός παραδείγματος. Έχουμε το ακόλουθο αρχείο 'sample', το οποίο φαίνεται με την cat παρακάτω.

Εντολή cat που εμφανίζει τα περιεχόμενα του αρχείου δείγματος πριν από το φιλτράρισμα

Θέλουμε να επισημάνουμε μόνο τις γραμμές που δεν περιέχουν τον χαρακτήρα 'a', αλλά το αποτέλεσμα θα πρέπει να είναι σε αντίστροφη σειρά. Για αυτό, μπορεί να χρησιμοποιηθεί η ακόλουθη σύνταξη:

cat sample | grep -v a | sort -r

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

Η cat διοχέτευσε τις εντολές grep -v και sort -r παράγοντας γραμμές αντίστροφης σειράς χωρίς το γράμμα a

Συχνές Ερωτήσεις

Μια διοχέτευση (|) στέλνει την έξοδο μιας εντολής απευθείας σε μια άλλη εντολή, συνδέοντάς τες μεταξύ τους. Η ανακατεύθυνση (> και <) συνδέει μια εντολή με ένα αρχείο, γράφοντας την έξοδο σε ένα αρχείο ή διαβάζοντας την είσοδο από ένα αρχείο. Οι διοχετεύσεις συνδέουν εντολές. Η ανακατεύθυνση συνδέει εντολές και αρχεία.

Το grep σημαίνει Global Regular Expression Print (Εκτύπωση Γενικής Κανονικής Έκφρασης). Σαρώνει ένα αρχείο ή μια εισαγωγή γραμμή προς γραμμή και εκτυπώνει κάθε γραμμή που ταιριάζει με το μοτίβο που του δίνετε. Το όνομα προέρχεται από την παλιά εντολή g/re/p του επεξεργαστή ed, η οποία εκτελούσε την ίδια αναζήτηση.

Η εντολή sort έχει την επιλογή -u που ταξινομεί και αφαιρεί διπλότυπες γραμμές σε ένα βήμα: sort -u file. Μπορείτε επίσης να κάνετε pipe sort στο uniq, όπως στο sort file | uniq, αφού το uniq αφαιρεί μόνο διπλότυπα που είναι ήδη γειτονικά.

Τερματίστε τη διοχέτευση με ανακατεύθυνση: cat sample | grep -va | sort -r > result.txt γράφει την τελική έξοδο σε ένα αρχείο. Για να δείτε την έξοδο στην οθόνη και να την αποθηκεύσετε ταυτόχρονα, χρησιμοποιήστε την εντολή tee για να κάνετε pipe.

Η εντολή grep αναζητά μέσα σε αρχεία γραμμές που ταιριάζουν με ένα μοτίβο κειμένου. Η εντολή find εντοπίζει τα ίδια τα αρχεία και τους καταλόγους με βάση το όνομα, το μέγεθος, τον τύπο ή την ημερομηνία. Με λίγα λόγια, η εντολή grep εξετάζει τα περιεχόμενα των αρχείων, ενώ η εντολή find αναζητά τα αρχεία στο δέντρο καταλόγων.

Η εντολή tee διαβάζει από μια διοχέτευση και γράφει τα δεδομένα τόσο στην οθόνη όσο και σε ένα ή περισσότερα αρχεία ταυτόχρονα, για παράδειγμα grep error log | tee errors.txt. Σας επιτρέπει να αποθηκεύσετε ενδιάμεση έξοδο χωρίς να διακόψετε τη διοχέτευση.

Οι βοηθοί τεχνητής νοημοσύνης μπορούν να προτείνουν τη σωστή αλυσίδα εντολών pipe από ένα αίτημα σε απλά αγγλικά, να εξηγήσουν άγνωστες σημαίες grep ή sort και να εντοπίσουν λάθη σε μια διοχέτευση. Τα εργαλεία μηχανικής μάθησης σαρώνουν επίσης την έξοδο του αρχείου καταγραφής pipe για να επισημάνουν ανωμαλίες που το χειροκίνητο φιλτράρισμα θα παρέλειπε.

Ναί. GitHub Copilot μπορεί να δημιουργήσει αγωγούς που συνδυάζουν τις εντολές cat, grep και sort από ένα σύντομο σχόλιο που περιγράφει τι χρειάζεστε και να ολοκληρώνει εντολές καθώς πληκτρολογείτε. RevΕξετάστε οποιαδήποτε προτεινόμενη διοχέτευση σε σχέση με δείγματα δεδομένων, ειδικά επιλογές που αναδιατάσσουν ή διαγράφουν γραμμές.

Συνοψίστε αυτήν την ανάρτηση με: