Αντικαταστήστε το κείμενο μέσα σε αρχεία με μία μόνο εντολή: perl

Μερικές φορές θέλουμε να αντικαταστήσουμε κείμενο μέσα σε ένα αρχείο, για παράδειγμα, αλλάζοντας όλα όσα λένε "η οικογένειά μου" σε "εμάς" στο Document.txt . Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε το πρόγραμμα επεξεργασίας κειμένου που προτιμάμε (Kate, Gedit, Sublime Text, κ.λπ.), αλλά είναι πάντα καλό να γνωρίζουμε εναλλακτικές λύσεις, άλλους τρόπους για να επιτύχουμε το ίδιο αποτέλεσμα.

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

Ακολουθώντας το παράδειγμα, έχουμε το αρχείο Document.txt που βρίσκεται στο $HOME/Document.txt με το ακόλουθο κείμενο:

Η οικογένειά μου είναι σαν όλων των άλλων, σαν τη δική σου ή του γείτονά σου. Στην πραγματικότητα, η οικογένειά μου προσπαθεί να είναι υπεύθυνη στα μάτια της κοινωνίας, πολιτικά και κοινωνικά ορθή. Ωστόσο, υπάρχει ένα μαύρο πρόβατο στο σπίτι μου, και αυτός είναι ο ρόλος μου, Χαχαχα! Πάντα ήμουν αυτή που δεν φοβάται να πει αυτό που σκέφτεται (ακόμα κι αν δεν είναι κοινωνικά αποδεκτό), αν και στην πραγματικότητα, η οικογένειά μου έχει βαρεθεί την σημερινή μπερδεμένη κοινωνία.

Η ακόλουθη εντολή θα αλλάξει το " η οικογένειά μου " σε " εμάς ":

perl -pi -e "s[mi familia][nosotros]g" $HOME/Documento.txt

Είναι τόσο απλό 

Έτσι το κείμενο θα ήταν:

(…) είμαστε σαν όλους τους άλλους, σαν τους δικούς σου ή του γείτονά σου. Στην πραγματικότητα, προσπαθούμε να είμαστε υπεύθυνοι άνθρωποι στα μάτια της κοινωνίας, πολιτικά και κοινωνικά ορθοί. Ωστόσο, υπάρχει ένα μαύρο πρόβατο στο σπίτι μου, και αυτός είναι ο ρόλος μου, Χαχαχα! Πάντα ήμουν αυτός που δεν φοβάται να πει αυτό που σκέφτεται (ακόμα κι αν δεν φαίνεται σωστό στα μάτια της κοινωνίας), αν και στην πραγματικότητα η οικογένειά μου έχει βαρεθεί τη βρωμιά της σημερινής κοινωνίας.

Η σύνταξη είναι:

perl -pi -e "s[lo-que-quiero-cambiar][lo-nuevo-a-poner]g" archivo-en-el-cual-reemplazar

Η εντολή μπορεί να φαίνεται λίγο περίπλοκη, ας την αναλύσουμε λίγο και ας την εξηγήσουμε λίγο πιο απλά 

  • perl : Τι θα χρησιμοποιήσουμε, perl
  • -πι : Pí, πώς π (κατά προσέγγιση τιμή 3.14)
  • -e : Το Ε φαντάζομαι για το «e να εκτελέσει» ^ - ^
  • Στη συνέχεια, σε εισαγωγικά » ανοίγουμε με ένα s και κλείνουμε με ένα g: "sg" …φανταστείτε το S για την έναρξη και το G για το Game Over 
  • Γυρίστε μεταξύ του sg πρέπει να βάλουμε δύο ομάδες αγκυλών: [] y [], έτσι: "S [] [] g"
  • Μέσα στις πρώτες αγκύλες όπως είπα παραπάνω, το κείμενο που θέλουμε να αφαιρέσουμε και να αντικαταστήσουμε με ένα νέο θα πάει, ενώ στο δεύτερο σύνολο αγκυλών το νέο κείμενο που θα τοποθετηθεί θα πάει, ακολουθώντας το παράδειγμα: "S [η οικογένειά μου] [εμείς] g"

Απλό δεν είναι;

Η εξήγηση είναι στην πραγματικότητα πολύ μεγαλύτερη από ό,τι είναι απαραίτητο για την εντολή, είναι αρκετά απλό να γίνει κατανοητό 

Η Perl είναι πολύ, πολύ περισσότερο από έναν τρόπο αντικατάστασης κειμένου, είναι μια ολόκληρη γλώσσα 

Αν θέλετε να μάθετε περισσότερα σχετικά με αυτό, εγκαταστήστε το πακέτο perl-doc και ρίξτε μια ματιά σε όλα όσα επιτρέπει. Είναι απλώς ένα διαφορετικό σύμπαν.

Παρεμπιπτόντως και κλείνοντας, υποθέτοντας ότι θέλετε να βρείτε όλα τα αρχεία .txt που έχετε στο $ HOME / Documents / και σε κάθε ένα αντικαταστήστε το "οικογένειά μου" με το "εμάς", μπορείτε να εγγραφείτε στο find + perl για να το πετύχετε:

find $HOME/Documentos/ -name *.txt -exec perl -p -i -e "s[mi familia][nosotros]g" {} \;

Ή χρησιμοποιώντας μπαλαντέρ:

perl -p -i -e "s[mi familia][nosotros]g" $HOME/Documentos/*.txt

Το πρόβλημα με αυτή τη δεύτερη παραλλαγή είναι ότι δεν θα αντικαταστήσει τα αρχεία που βρίσκονται σε υποφακέλους 

Τέλος πάντων, ελπίζω να σας φάνηκε ενδιαφέρον. Για μένα ήταν πολύ χρήσιμο, τώρα μπορώ να αντικαταστήσω το κείμενο απευθείας από το τερματικό... υπέροχο! 


Προσθήκη ως προτιμώμενης πηγής στην Google