Τι είναι το SED στο Linux και πώς το χρησιμοποιείτε;
Το sed αντιπροσωπεύει το tream ed itor και είναι μια κοινά χρησιμοποιούμενη εντολή στο Linux / Unix. Το όνομα προέρχεται από ένα χαρτοφυλάκιο των δύο λέξεων. Δεν είναι επεξεργαστής κειμένου, αν και τροποποιεί κείμενο. Αντίθετα, το sed λαμβάνει την εισαγωγή κειμένου ως "ροή" και επεξεργάζεται τη ροή σύμφωνα με τις οδηγίες σας.
Σε γενικές γραμμές, οι άνθρωποι χρησιμοποιούν sed
όπως μια έκδοση γραμμής εντολών για να βρουν και να αντικαταστήσουν. Η κύρια εντολή στο πρόγραμμα χρησιμοποιείται για να αντικαταστήσει μια συμβολοσειρά χαρακτήρων με μια άλλη. Αυτό το καθιστά χρήσιμο για την εκτέλεση εντοπισμού και αντικατάστασης λειτουργιών σε μια παρτίδα αρχείων, αλλά δεν είναι τόσο εύκολο να χρησιμοποιηθεί ως κάτι από το Notepad ή το Word. Θα διαπιστώσετε ότι η σύνταξη παίρνει λίγο συνηθίσει, αλλά μόλις το έχετε κάτω, θα δείτε πόσο απίστευτα ισχυρός αυτός ο μικρός επεξεργαστής μπορεί να είναι.
Χρησιμοποιώντας sed για υποκατάσταση
Για να χρησιμοποιήσετε το sed, θα πρέπει να ανοίξετε ένα παράθυρο τερματικού. Η εντολή καλείται με sed
, αλλά πληκτρολογώντας αυτό μόνο δεν θα κάνει τίποτα. Πρέπει να δώσετε μία από τις εντολές, καθώς και ορισμένες παραμέτρους.
Η πιο κοινή παράμετρος είναι υποκατάστατη ή s
. Μια απλή εντολή αντικατάστασης sed
δείχνει κάτι σαν το εξής:
sed / cat / dog /
Αυτή η εντολή θα παραγγείλει sed για να σαρώσει το εισερχόμενο κείμενο και να αντικαταστήσει κάθε εμφάνιση της συμβολοσειράς "cat" με "dog". Για να αποδείξουμε, θα χρησιμοποιήσουμε την εντολή echo
για να δώσουμε sed κάτι με το οποίο θα δουλέψουμε.
echo γάτα καταπέλτης | sed / cat / dog /
Υπάρχουν τρία κύρια μέρη στην εντολή sed. Πρώτον, υπάρχει sed
που ξεκινάει το πρόγραμμα. Στη συνέχεια, υπάρχει το s
που ξεκινά την εντολή αντικατάστασης. Η εμπρόσθια κάθετος /
είναι ένας διαχωριστής. Το string μετά από αυτό θα είναι το string sed ψάχνει. Η συμβολοσειρά μετά τη δεύτερη κάθετο θα είναι οι χαρακτήρες αντικατάστασης που γράφουν sed στη ροή. Η τελική κάθετος κλείνει την εντολή. Όλα μαζί, είναι 's/text-to-find/text-to-replace/'
.
Σημειώστε τα μοναδικά αποσπάσματα σε αυτό το παράδειγμα. Τα μοναδικά αποσπάσματα σάς επιτρέπουν να χρησιμοποιείτε μετα-χαρακτήρες στην εντολή σας. Ενώ τα αποσπάσματα δεν είναι απαραίτητα για τα περισσότερα από τα παραδείγματα μας, θα πρέπει να αναπτύξετε τη συνήθεια να χρησιμοποιείτε εισαγωγικά για όλες τις εντολές.
Τι γίνεται με μερικές χορδές; Η παραπάνω εντολή θα λειτουργήσει σε οποιαδήποτε εμφάνιση της συμβολοσειράς "γάτα", ακόμα κι αν είναι μέρος μιας άλλης λέξης. Για παράδειγμα, ο "καταπέλτης" θα γίνει "dogapult" ως "catamaran" θα γίνει "dogamaran".
echo catapult | sed / cat / dog /
Παγκόσμια αντικατάσταση
Στο πρώτο μας παράδειγμα ίσως έχετε παρατηρήσει ότι αντικαταστάθηκε μόνο η πρώτη εμφάνιση της αντίστοιχης συμβολοσειράς. Όπως και πολλά βοηθητικά προγράμματα GNU, το sed είναι γραμμικό. Ως αποτέλεσμα, λειτουργεί μόνο κατά τον πρώτο αγώνα σε μια γραμμή. Αν έχετε πολλές αντιστοιχίσεις για την υποψήφια συμβολοσειρά στη γραμμή, θα αλλάξει μόνο η πρώτη. Για να κάνετε την εργασία sed σε κάθε εμφάνιση της συμβολοσειράς στόχου, χρησιμοποιήστε τη σημαία g
στο τέλος της εντολής:
sed 's / cat / dog / g'
Αυτό θα λειτουργούσε όπως το ακόλουθο παράδειγμα:
echo catapult γάτα καταμαράν | sed 's / cat / dog / g'
Χωρίς την παγκόσμια σημαία, θα αντικατασταθεί μόνο η πρώτη περίπτωση της "γάτας" σε κάθε γραμμή.
Ρύθμιση αρχείων εισόδου και εξόδου
Από προεπιλογή, το sed θα λειτουργεί με τυπική είσοδο. Ωστόσο, αυτό δεν είναι πολύ χρήσιμο. Για να τρέξετε sed σε ένα αρχείο, καθορίστε το όνομα αρχείου στο τέλος της εντολής, όπως έτσι:
sed 's / cat / dog / g' oldfile.txt> newfile.txt
Αυτό θα τρέξει sed στην "oldfile.txt" και θα αποθηκεύσει την έξοδο της εντολής στο "newfile.txt". Αν δεν υπάρχει "newfile.txt", θα δημιουργηθεί από την εντολή. Εάν δεν καθορίσετε ένα αρχείο εξόδου, το sed θα επαναλάβει το νέο κείμενο του αρχείου σε τυποποιημένη είσοδο.
Αν θέλετε να αντικαταστήσετε τα περιεχόμενα ενός αρχείου, θα χρειαστεί να χρησιμοποιήσετε τη σημαία -i
. Αυτή η σημαία κάνει τις αλλαγές "στη θέση τους".
sed-i '' 's / cat / dog' oldfile.txt
Αυτή η εντολή αντικαθιστά αμέσως τα περιεχόμενα του αρχείου προορισμού, κάτι που είναι ελαφρώς επικίνδυνο. Για να παραμείνετε στην ασφαλή πλευρά, μπορείτε να δημιουργήσετε ένα αντίγραφο ασφαλείας επί τόπου.
Για να δημιουργήσετε ένα αντίγραφο ασφαλείας του αρχείου, τοποθετήστε μια επέκταση μετά το -i
. Δεν χρειάζεται να είναι μια λειτουργική επέκταση: ".bu" ή ".bak" λειτουργούν σωστά. Αυτό θα δημιουργήσει ένα αρχείο αντιγράφου ασφαλείας με μια επέκταση.
sed-i.bak '/ cat / dog' oldfile.txt
Αυτό δημιουργεί το "oldfile.txt.bak", το οποίο περιέχει τα μη επεξεργασμένα δεδομένα κειμένου από την αρχική έκδοση του "oldfile.txt".
Ταίριασμα των κανονικών εκφράσεων
Η πραγματική δύναμη του sed
προέρχεται από την ταύτιση των κανονικών εκφράσεων. Αυτό σας επιτρέπει να ορίσετε μοτίβα για αντιστοίχιση, αντί για κυριολεκτικές συμβολοσειρές. Για παράδειγμα, θα μπορούσαμε να χρησιμοποιήσουμε κάτι σαν την παρακάτω συμβολοσειρά για να επαναλάβουμε οποιοδήποτε σύνολο από έναν ή περισσότερους αριθμούς:
echo "123 abc" | sed 's / [0-9] [0-9] * / & &
Περαιτέρω εκμάθηση
sed είναι ένα εξαιρετικά ισχυρό βοηθητικό πρόγραμμα με ένα βάθος εξουσίας παρόμοιο με μια γλώσσα scripting. Για να μάθετε περισσότερα σχετικά με τις πλήρεις δυνατότητες του sed, δείτε τον περιεκτικό οδηγό του Bruce Barnett για το sed.