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

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

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

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

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

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

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

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

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

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

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

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"

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

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

Το 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

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

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


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   Κεραία dijo

    Λοιπόν, νομίζω ότι πολλοί από εμάς γνωρίζουμε την εντολή sed, η οποία εξυπηρετεί τον ίδιο σκοπό, την κάνει πολύ καλύτερη και είναι ευκολότερη στη χρήση ...

    1.    KZKG ^ Γκάρα dijo

      Ευχαριστώ για το σχόλιο σου,
      Δύο μόνο λεπτομέρειες, γιατί λέτε ότι το sed το κάνει καλύτερο; Είναι πολύ πιο εύκολο στη χρήση με τόσους πολλούς «περίεργους» χαρακτήρες;

  2.   Federico A. Valdes Toujague dijo

    Χαιρετίσματα σε όλους!!!. Έχω χρησιμοποιήσει την εντολή δίψα, και η μέθοδος που περιγράφεται εδώ με perl είναι απλούστερη. Ευχαριστώ KZKG ^ Gaara !!!.

    1.    KZKG ^ Γκάρα dijo

      Ευχαριστώ για το σχόλιο 🙂
      Λοιπόν, τουλάχιστον μου φαίνεται ότι είναι απλούστερο από τις κανονικές εκφράσεις ... ότι με τόσους πολλούς «περίεργους» χαρακτήρες, κάτι πολύ περίπλοκο για να καταλάβεις και να μάθεις μπορεί να γίνει για τους μη καταλαβαίνους.

      1.    Γκίσκαρντ dijo

        Υπάρχει μια «παλιά» παροιμία εκεί έξω: «Είχα πρόβλημα, αποφάσισα να χρησιμοποιήσω τις Κανονικές εκφράσεις ... τώρα έχω ΔΥΟ προβλήματα»

        1.    KZKG ^ Γκάρα dijo

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

          Αν ήξερα αυτήν την εντολή πριν από χρόνια, ΘΕΟ !! πόσο απλή θα ήταν η ζωή μου 😀

          1.    Γκίσκαρντ dijo

            Σίγουρος! Καλά χειρισμένα είναι πολύ ισχυρά 🙂 Τίποτα καλύτερο για χειρισμό κειμένου. Αλλά μερικές φορές, όπως λέτε σε αυτήν την περίπτωση με τον Perl, δεν χρειάζεται να προχωρήσετε τόσο μακριά αν αρκεί μια αντικατάσταση.
            Θα χρησιμοποιούσα Python ούτως ή άλλως :)

    2.    κυνηγός dijo

      Αλλά στη δίψα το βλέπω ακόμα πιο απλό ... κάνω κάτι λάθος;

      sed -i "ναι / τι-θέλω-να αλλάξω / νέο-να-βάλω /" αρχείο-σε-που-να-αντικαταστήσω

      1.    KZKG ^ Γκάρα dijo

        heh heh ... και αν θέλω να αντικαταστήσω το "http://my.blog.com/content/" με το "http://my.blog.com/uploads/files/" 😀 ... ήδη εκεί έχετε να βάλετε \ με κενά και άλλα, και γίνεται περίπλοκο ή όχι;

        1.    κυνηγός dijo

          Δεν είναι υποχρεωτική η χρήση / ως διαχωριστικό. Κοιτάξτε με +

          αρχείο sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+»

          1.    KZKG ^ Γκάρα dijo

            O_O… WTF!
            Άνοιξε ένα ολόκληρο σύμπαν επιλογών για μένα τώρα .. O_O

          2.    Γκίσκαρντ dijo

            Λατρεύω αυτές τις δημοσιεύσεις όπου όλοι μαθαίνουμε κάτι 🙂
            Δεν το ήξερα ούτε.

  3.   RAW-Βασικό dijo

    Προτιμώ να χρησιμοποιώ απευθείας ..

    Τόσο απλό όσο:
    :% s / us / η οικογένειά μου / g

    % -> ολόκληρο έγγραφο
    s -> αναζήτηση
    g -> όλες τις εμφανίσεις

    Χαιρετισμοί ..

    1.    KZKG ^ Γκάρα dijo

      Ευχαριστώ!
      Δεν ήξερα πώς να το κάνω με το vi

  4.   st0rmt4il dijo

    Προστέθηκε στα αγαπημένα!

    Ευχαριστώ!

  5.   n3 καταιγίδα dijo

    Ρίξτε μια ματιά εάν έχετε λίγο χρόνο στην εντολή rpl

    http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/

  6.   Ντουράν dijo

    Υπέροχη είσοδος! Σε περίπτωση που κάποιος ενδιαφέρεται, το ίδιο με την εντολή Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html

    1.    Αμφιβολία dijo

      Και τι συμβαίνει εάν μέσα στο αρχείο αυτό που θέλω να αντικαταστήσω έχει εισαγωγικά;
      Παράδειγμα αντικαταστήστε αυτό που λέει κείμενο: »1 ″ με κείμενο:» 2 ″
      πώς θα ήταν η εντολή;

  7.   Percy salgado dijo

    Γεια σας

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

    κείμενο για αλλαγή: Ζήτω το Περού
    νέο κείμενο: Viva mi patria @percysalgado
    Εμφανίζεται: Ζήτω η πατρίδα μου

    Ευχαριστώ για τη βοήθειά σας

  8.   ανώνυμος dijo

    Πρέπει να χρησιμοποιήσετε την κάθετο πριν από τους χαρακτήρες με διπλή χρήση @, #, έτσι ώστε να ερμηνεύονται ως κείμενο.

  9.   Gaba dijo

    Και πώς το κάνω στα παράθυρα ;;;;