Σε ορισμένες περιπτώσεις θέλουμε να αντικαταστήσουμε το κείμενο μέσα σε ένα αρχείο, για παράδειγμα, να αλλάξουμε 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
Το πρόβλημα με αυτήν τη δεύτερη παραλλαγή είναι ότι δεν θα αντικαταστήσει σε αρχεία που βρίσκονται σε υποφακέλους 🙂
Τέλος πάντων, ελπίζω να το βρήκατε ενδιαφέρον. Για μένα ήταν πολύ χρήσιμο, μπορώ ήδη να αντικαταστήσω κείμενο απευθείας από το τερματικό ... υπέροχο! 😀
Λοιπόν, νομίζω ότι πολλοί από εμάς γνωρίζουμε την εντολή sed, η οποία εξυπηρετεί τον ίδιο σκοπό, την κάνει πολύ καλύτερη και είναι ευκολότερη στη χρήση ...
Ευχαριστώ για το σχόλιο σου,
Δύο μόνο λεπτομέρειες, γιατί λέτε ότι το sed το κάνει καλύτερο; Είναι πολύ πιο εύκολο στη χρήση με τόσους πολλούς «περίεργους» χαρακτήρες;
Χαιρετίσματα σε όλους!!!. Έχω χρησιμοποιήσει την εντολή δίψα, και η μέθοδος που περιγράφεται εδώ με perl είναι απλούστερη. Ευχαριστώ KZKG ^ Gaara !!!.
Ευχαριστώ για το σχόλιο 🙂
Λοιπόν, τουλάχιστον μου φαίνεται ότι είναι απλούστερο από τις κανονικές εκφράσεις ... ότι με τόσους πολλούς «περίεργους» χαρακτήρες, κάτι πολύ περίπλοκο για να καταλάβεις και να μάθεις μπορεί να γίνει για τους μη καταλαβαίνους.
Υπάρχει μια «παλιά» παροιμία εκεί έξω: «Είχα πρόβλημα, αποφάσισα να χρησιμοποιήσω τις Κανονικές εκφράσεις ... τώρα έχω ΔΥΟ προβλήματα»
ΧΑΧΑΧΑΧΑΧΑΧΑ !!!
Οι τακτικές εκφράσεις μπορούν να σώσουν τις ζωές μας σε ένα συγκεκριμένο σημείο ... ναι, χρειάζεται πολύς χρόνος για να μάθουμε πώς να τις χρησιμοποιούμε και να μην πεθαίνουμε προσπαθώντας.
Αν ήξερα αυτήν την εντολή πριν από χρόνια, ΘΕΟ !! πόσο απλή θα ήταν η ζωή μου 😀
Σίγουρος! Καλά χειρισμένα είναι πολύ ισχυρά 🙂 Τίποτα καλύτερο για χειρισμό κειμένου. Αλλά μερικές φορές, όπως λέτε σε αυτήν την περίπτωση με τον Perl, δεν χρειάζεται να προχωρήσετε τόσο μακριά αν αρκεί μια αντικατάσταση.
Θα χρησιμοποιούσα Python ούτως ή άλλως :)
Αλλά στη δίψα το βλέπω ακόμα πιο απλό ... κάνω κάτι λάθος;
sed -i "ναι / τι-θέλω-να αλλάξω / νέο-να-βάλω /" αρχείο-σε-που-να-αντικαταστήσω
heh heh ... και αν θέλω να αντικαταστήσω το "http://my.blog.com/content/" με το "http://my.blog.com/uploads/files/" 😀 ... ήδη εκεί έχετε να βάλετε \ με κενά και άλλα, και γίνεται περίπλοκο ή όχι;
Δεν είναι υποχρεωτική η χρήση / ως διαχωριστικό. Κοιτάξτε με +
αρχείο sed -i «s + http: //my.blog.com/content/+http: //my.blog.com/uploads/files/+»
O_O… WTF!
Άνοιξε ένα ολόκληρο σύμπαν επιλογών για μένα τώρα .. O_O
Λατρεύω αυτές τις δημοσιεύσεις όπου όλοι μαθαίνουμε κάτι 🙂
Δεν το ήξερα ούτε.
Προτιμώ να χρησιμοποιώ απευθείας ..
Τόσο απλό όσο:
:% s / us / η οικογένειά μου / g
% -> ολόκληρο έγγραφο
s -> αναζήτηση
g -> όλες τις εμφανίσεις
Χαιρετισμοί ..
Ευχαριστώ!
Δεν ήξερα πώς να το κάνω με το vi
Προστέθηκε στα αγαπημένα!
Ευχαριστώ!
Ρίξτε μια ματιά εάν έχετε λίγο χρόνο στην εντολή rpl
http://microbuffer.wordpress.com/2011/02/28/rpl-buscar-y-reemplazar-strings-en-linux-unix/
Υπέροχη είσοδος! Σε περίπτωση που κάποιος ενδιαφέρεται, το ίδιο με την εντολή Linux sed: http://www.sysadmit.com/2015/07/linux-reemplazar-texto-en-archivos-con-sed.html
Και τι συμβαίνει εάν μέσα στο αρχείο αυτό που θέλω να αντικαταστήσω έχει εισαγωγικά;
Παράδειγμα αντικαταστήστε αυτό που λέει κείμενο: »1 ″ με κείμενο:» 2 ″
πώς θα ήταν η εντολή;
Γεια σας
Ήθελα να αντικαταστήσω μια συμβολοσειρά που είχε ένα @ στη μέση και μόνο το κείμενο άλλαξε πριν από το.
κείμενο για αλλαγή: Ζήτω το Περού
νέο κείμενο: Viva mi patria @percysalgado
Εμφανίζεται: Ζήτω η πατρίδα μου
Ευχαριστώ για τη βοήθειά σας
Πρέπει να χρησιμοποιήσετε την κάθετο πριν από τους χαρακτήρες με διπλή χρήση @, #, έτσι ώστε να ερμηνεύονται ως κείμενο.
Και πώς το κάνω στα παράθυρα ;;;;