Με τερματικό: Χρήση κανονικών εκφράσεων II: Αντικαταστάσεις

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

Λίγα περισσότερα για την εντολή grep

Πριν ξεκινήσω να μιλάω για sed, θα ήθελα να σχολιάσω λίγο περισσότερο την εντολή grep για να ολοκληρώσω λίγο αυτό που εξηγήθηκε στο προηγούμενο άρθρο. Όλα όσα πρόκειται να πω θα είναι και σχετικά με αυτό. Αργότερα θα δούμε τη σχέση μεταξύ αυτού και των αναζητήσεων.

Συνδυάζοντας κανονικές εκφράσεις

Πολλοί από τους ειδικούς χαρακτήρες για τους οποίους μίλησα στο προηγούμενο άρθρο μπορούν να συνδυαστούν, όχι μόνο με άλλους χαρακτήρες, αλλά και με ολόκληρες κανονικές εκφράσεις. Ο τρόπος για να γίνει αυτό είναι να χρησιμοποιήσετε παρενθέσεις για να σχηματίσετε μια υποεκφραση. Ας δούμε ένα παράδειγμα αυτού. Ας ξεκινήσουμε κατεβάζοντας ένα κείμενο που μπορούμε να χρησιμοποιήσουμε για δοκιμή. Είναι μια λίστα με φράσεις. Για αυτό θα χρησιμοποιήσουμε την ακόλουθη εντολή:

curl http://artigoo.com/lista-de-frases-comparativas-comicas 2>/dev/null | sed -n 's/.*\(.*\.\)<\/p>/\1/gp' > frases

 Αυτό θα σας αφήσει στον κατάλογο όπου ξεκινάτε ένα αρχείο με το όνομα «φράσεις». Μπορείτε να το ανοίξετε για να το ρίξετε μια ματιά και να γελάσετε λίγο. 🙂

Ας υποθέσουμε ότι θέλουμε να βρούμε τις φράσεις που έχουν ακριβώς 6 λέξεις. Η δυσκολία είναι να σχηματίσετε μια κανονική έκφραση που ταιριάζει με κάθε λέξη. Μια λέξη είναι μια ακολουθία γραμμάτων, είτε κεφαλαίων είτε πεζών, που θα ήταν κάτι σαν '[a-zA-Z]+', αλλά πρέπει επίσης να καθορίσετε ότι αυτά τα γράμματα πρέπει να διαχωρίζονται από άλλους χαρακτήρες εκτός από γράμματα, δηλαδή θα ήταν κάτι σαν '[a-zA-Z]+[^a-zA-Z]+'. Θυμηθείτε: το "^" ως ο πρώτος χαρακτήρας εντός των αγκυλών υποδηλώνει ότι θέλουμε να ταιριάξουμε με χαρακτήρες που δεν βρίσκονται στο εύρος και το "+" δείχνει 1 ή περισσότερους χαρακτήρες.

Έχουμε ήδη μια κανονική έκφραση που μπορεί να ταιριάζει με μια λέξη. Για να το συνδυάσετε με 6, θα πρέπει να επαναληφθεί 6 φορές. Γι 'αυτό χρησιμοποιήσαμε τα πλήκτρα, αλλά είναι άχρηστο '[a-zA-Z]+[^a-zA-Z]+{6}', επειδή το 6 θα επαναλάβει το τελευταίο μέρος της κανονικής έκφρασης και αυτό που θέλουμε είναι να τα επαναλάβουμε όλα, οπότε αυτό που πρέπει να θέσουμε είναι αυτό: '([a-zA-Z]+[^a-zA-Z]+){6}'. Με τις παρενθέσεις σχηματίζουμε μια υποεκφραση και με τα τιράντες την επαναλαμβάνουμε 6 φορές. Τώρα πρέπει απλώς να προσθέσετε ένα "^" μπροστά και ένα "$" στο πίσω μέρος για να ταιριάξετε ολόκληρη τη γραμμή. Η εντολή έχει ως εξής:

grep -E '^([a-zA-Z]+[^a-zA-Z]+){6}$' frases

Και το αποτέλεσμα είναι ακριβώς αυτό που θέλαμε:

Τραγουδάται περισσότερο από τα Macarena. Είστε πιο τελειωμένοι από τον Luis Aguilé. Έχετε λιγότερη κουλτούρα από μια πέτρα. Γνωρίζετε περισσότερες γλώσσες από την Cañita Brava. Έχει περισσότερες ρυτίδες από τον Tutan Khamón. Γνωρίζετε λιγότερο από τον Rambo για τη φροντίδα των παιδιών.

Παρατηρήστε ότι βάζουμε την παράμετρο -E επειδή θέλουμε να χρησιμοποιήσουμε εκτεταμένες κανονικές εκφράσεις για να κάνουμε το "+" να λειτουργεί. Εάν χρησιμοποιήσαμε τις βασικές, θα πρέπει να ξεφύγουμε από τις παρενθέσεις και τα τιράντες.

Πίσω αναφορές ή παραπομπές

Εάν έχετε εγκαταστήσει έναν ορθογραφικό έλεγχο, πιθανότατα θα έχετε μια λίστα λέξεων /usr/share/dict/words. Εάν όχι, μπορείτε να το εγκαταστήσετε σε αψίδα με:

sudo pacman -S words

Ή στο debian με:

sudo aptitude install dictionaries-common

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

Θα χρησιμοποιήσουμε αυτό το αρχείο. Αποδεικνύεται ότι είμαστε πολύ περίεργοι να γνωρίζουμε και τα επτά γράμματα palindromes εκεί έξω. Για όσους δεν γνωρίζουν: Το palindrome είναι μια λέξη capicúa, δηλαδή μπορεί να διαβαστεί από αριστερά προς τα δεξιά, καθώς και από δεξιά προς τα αριστερά. Ας δοκιμάσουμε την ακόλουθη εντολή:

grep '^\(.\)\(.\)\(.\).\3\2\1$' /usr/share/dict/words

Φαίνεται λίγο παράξενο, έτσι; Εάν το δοκιμάσουμε, το αποτέλεσμα θα εξαρτηθεί από τη γλώσσα του διανομέα σας και τις λέξεις που περιλαμβάνονται στη λίστα σας, αλλά στην περίπτωσή μου, με την ισπανική γλώσσα, το αποτέλεσμα είναι αυτό:

ανιλίνη ανιλίνη τροχαίο

Ας δούμε πώς λειτουργεί αυτή η κανονική έκφραση.

Εκτός από το "^" και το "$", για το οποίο ήδη γνωρίζουμε τι είναι, το πρώτο πράγμα που βλέπουμε στα αριστερά είναι τρεις ομάδες σημείων που περικλείονται σε παρένθεση. Μην μπερδεύεστε από τις μπάρες μπροστά από κάθε παρένθεση. Πρέπει να ξεφύγουν από τις παρενθέσεις επειδή χρησιμοποιούμε βασικές κανονικές εκφράσεις, αλλά δεν έχουν άλλη σημασία. Το σημαντικό είναι ότι ζητάμε τρεις χαρακτήρες με τις τελείες, αλλά κάθε μία από αυτές τις κουκκίδες περικλείεται σε παρένθεση. Αυτό γίνεται για να αποθηκεύσετε τους χαρακτήρες που ταιριάζουν με αυτά τα σημεία, ώστε να μπορούν να αναφερθούν ξανά από την κανονική έκφραση. Αυτή είναι μια άλλη χρήση παρενθέσεων που θα είναι χρήσιμη αργότερα κατά την αντικατάσταση.

Εδώ έρχονται οι τρεις παρακάτω αριθμοί με την κάθετο μπροστά τους. Σε αυτήν την περίπτωση, η γραμμή είναι σημαντική. Χρησιμοποιείται για να δείξει ότι ο παρακάτω αριθμός είναι μια επαναφορά και αναφέρεται σε μία από τις προηγούμενες παρενθέσεις. Για παράδειγμα: \ 1 αναφέρεται στην πρώτη παρένθεση, \ 2 στη δεύτερη και ούτω καθεξής.

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

Εάν χρησιμοποιούσαμε εκτεταμένες κανονικές εκφράσεις, οι παρενθέσεις δεν θα έπρεπε να διαφύγουν, αλλά με εκτεταμένες κανονικές εκφράσεις, οι αναφορές στο παρελθόν δεν λειτουργούν σε όλα τα προγράμματα επειδή δεν είναι τυποποιημένες. Ωστόσο, με το grep λειτουργούν, έτσι μπορεί να είναι ένας άλλος τρόπος να γίνει το ίδιο. Μπορείτε να το δοκιμάσετε αν θέλετε.

Αντικατάσταση αντικατάστασης: η εντολή sed

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

sed [-r] 's/REGEX/REPL/g' FICHERO

Ή επίσης:

COMANDO | sed [-r] 's/REGEX/REPL/g'

Όπου το REGEX θα είναι η κανονική έκφραση αναζήτησης και θα αντικαταστήσετε την αντικατάσταση. Λάβετε υπόψη ότι αυτή η εντολή δεν αντικαθιστά πραγματικά τίποτα στο αρχείο που υποδεικνύουμε, αλλά αυτό που κάνει είναι να μας δείξει το αποτέλεσμα της αντικατάστασης στο τερματικό, οπότε μην φοβάστε τις εντολές που πρόκειται να θέσω στη συνέχεια. Κανένα από αυτά δεν πρόκειται να τροποποιήσει αρχεία στο σύστημά σας.

Ας ξεκινήσουμε με ένα απλό παράδειγμα. Όλοι έχουμε διάφορα αρχεία διαμόρφωσης στον κατάλογο / etc που συνήθως έχουν σχόλια που ξεκινούν με "#". Ας υποθέσουμε ότι θέλουμε να δούμε ένα από αυτά τα αρχεία χωρίς τα σχόλια. Για παράδειγμα, θα το κάνω με το fstab. Μπορείτε να δοκιμάσετε με αυτό που θέλετε.

sed 's/#.*//g' /etc/fstab

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

Σε αυτήν την εντολή η έκφραση αναζήτησης είναι «#.*", Αυτό είναι ένα" # "ακολουθούμενο από οποιονδήποτε αριθμό χαρακτήρων, δηλαδή τα σχόλια. Και η έκφραση αντικατάστασης, αν κοιτάξετε τις δύο γραμμές στη σειρά, θα δείτε ότι δεν υπάρχουν, οπότε αυτό που κάνει είναι να αντικαταστήσει τα σχόλια με τίποτα, δηλαδή να τα διαγράψετε. Απλούστερη αδύνατη.

Τώρα θα κάνουμε το αντίθετο. Ας υποθέσουμε ότι αυτό που θέλουμε είναι να σχολιάσουμε όλες τις γραμμές του αρχείου. Ας δοκιμάσουμε έτσι:

sed 's/^/# /g' /etc/fstab

Θα δείτε ότι, στην έξοδο της εντολής, όλες οι γραμμές ξεκινούν με ένα σύμβολο κατακερματισμού και ένα κενό διάστημα. Αυτό που κάναμε είναι να αντικαταστήσουμε την αρχή της γραμμής με «# «. Αυτό είναι επίσης ένα αρκετά απλό παράδειγμα όπου το κείμενο που πρόκειται να αντικατασταθεί είναι πάντα το ίδιο, αλλά τώρα θα το περιπλέξουμε λίγο περισσότερο.

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

sed 's/\([A-Z]\)/(\1)/g' frases

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

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

sed 's/.*/"&"/g' frases

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

Μερικές χρήσιμες εντολές με κανονικές εκφράσεις

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

  • Εμφάνιση ενοτήτων μιας σελίδας man:

man bash | grep '^[A-Z][A-Z ]*$'

Φυσικά, μπορείτε να αλλάξετε την εντολή bash σε ό, τι θέλετε. Και μετά από τον άνθρωπο, μπορείτε να μεταβείτε απευθείας στην ενότητα που σας ενδιαφέρει χρησιμοποιώντας, φυσικά, μια κανονική έκφραση. Πατήστε «/» για να ξεκινήσετε την αναζήτηση και να γράψετε «^ALIASES$Για παράδειγμα, για να μεταβείτε στην ενότητα ALIASES. Νομίζω ότι αυτή είναι η πρώτη χρήση που ξεκίνησα να κάνω κανονικές εκφράσεις πριν από μερικά χρόνια. Η μετακίνηση σε μερικές σελίδες του εγχειριδίου είναι σχεδόν αδύνατη χωρίς τέτοιο τέχνασμα.

  • Εμφάνιση των ονομάτων όλων των χρηστών του μηχανήματος, συμπεριλαμβανομένων των ειδικών:

sed 's/\([^:]*\).*/\1/' /etc/passwd

  • Εμφάνιση ονομάτων χρηστών, αλλά μόνο εκείνων με κέλυφος:

grep -vE '(/false|/nologin)$' /etc/passwd | sed 's/\([^:]*\).*/\1/g'

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

  • Εισαγάγετε κόμμα πριν από τα τρία τελευταία ψηφία όλων των αριθμών στο αρχείο αριθμών:

sed 's/\(^\|[^0-9.]\)\([0-9]\+\)\([0-9]\{3\}\)/\1\2,\3/g' numbers

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

  •  Εξαγωγή όλων των διευθύνσεων email από ένα αρχείο:

grep -E '\<[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\>' FICHERO

  • Διαχωρίστε την ημέρα, τον μήνα και το έτος όλων των ημερομηνιών που εμφανίζονται σε ένα αρχείο:

sed -r 's/([0-9]{2})[/-]([0-9]{2})[/-]([0-9]{4})/Día: \1, Mes: \2, Año: \3/g' FICHERO

  • Μάθετε την τοπική μας IP:

/sbin/ifconfig | grep 'inet .*broadcast' | sed -r 's/[^0-9]*(([0-9]+\.){3}[0-9]+).*/\1/g'

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

Μερικές χρήσιμες διευθύνσεις

Ακολουθούν ορισμένες διευθύνσεις που μπορεί να είναι χρήσιμες σχετικά με τις κανονικές εκφράσεις:

  • Βιβλιοθήκη τακτικής έκφρασης: Πρόκειται για μια βιβλιοθήκη κανονικής έκφρασης στην οποία μπορείτε να αναζητήσετε κανονικές εκφράσεις που σχετίζονται με το θέμα που σας ενδιαφέρει. Για αναζήτηση διευθύνσεων ιστού, ταυτότητας ή οτιδήποτε άλλο.
  • RegExr: Ένας διαδικτυακός ελεγκτής τακτικής έκφρασης. Σας επιτρέπει να εισάγετε ένα κείμενο και να εφαρμόζετε μια κανονική έκφραση είτε σε αναζήτηση είτε σε αντικατάσταση. Δίνει πληροφορίες σχετικά με την κανονική έκφραση και έχετε κάποιες επιλογές για να αλλάξετε τη συμπεριφορά της.
  • Δοκιμή τακτικών εκφράσεων: Πρόκειται για ένα πρόσθετο για τον Firefox που σας επιτρέπει να ελέγχετε κανονικές εκφράσεις από το πρόγραμμα περιήγησης.

Συμπέρασμα

Προς το παρόν αυτό είναι όλο. Οι τυπικές εκφράσεις είναι περίπλοκες αλλά χρήσιμες. Χρειάζεται χρόνος για να τα μάθεις, αλλά αν είσαι σαν εμένα, το να παίζεις μαζί τους θα φαίνεται διασκεδαστικό και, σιγά-σιγά θα τους κυριαρχήσεις. Είναι ένας ολόκληρος κόσμος. Θα υπήρχαν πολλά να πουν ακόμη, σχετικά με τεμπέληδες ποσοτικούς προσδιοριστές, PERL τύπου PERL, multiline κ.λπ. Και έπειτα κάθε πρόγραμμα έχει τα χαρακτηριστικά και τις παραλλαγές του, οπότε η καλύτερη συμβουλή που μπορώ να σας δώσω είναι να κοιτάζετε πάντα την τεκμηρίωση του προγράμματος που χρησιμοποιείτε κάθε φορά που πρέπει να γράφετε μια κανονική έκφραση σε ένα νέο πρόγραμμα.

Γεια! … Γεια σου! … ΞΥΠΝΑ! … ΤΙ ΚΑΝΕΤΕ ΟΛΟΙ ΤΟ ΥΠΝΕΣ; 🙂

Φουέντες

Μερικές από τις ιδέες και τα παραδείγματα για τακτικές εκφράσεις σε αυτό το άρθρο που έχω πάρει από εδώ:


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

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

*

*

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

  1.   Έλαβ dijo

    Εντεχνος!!!

    1.    hexborg dijo

      Δεν είναι τόσο κακό, αλλά σας ευχαριστώ πολύ. Ελπίζω να τους αρέσει. 🙂

      1.    oscar dijo

        Μου αρέσει χα!

        1.    hexborg dijo

          Τότε πρέπει να έκανα κάτι σωστό. ΧΑΧΑΧΑ!! 🙂

          Σας ευχαριστώ πολύ για το σχόλιό σας.

          1.    Μπλερ Πασάλ dijo

            Γαμώτο συνεχίστε να γράφετε άντρα, συνεχίστε.

          2.    hexborg dijo

            @Blaire Pascal: Σχόλια όπως τα δικά σας ενθαρρύνουν. 🙂 Ευχαριστώ πολύ !!

      2.    Πόλη dijo

        Μου άρεσε επίσης ... ευχαριστώ 🙂

        1.    hexborg dijo

          Ευχαριστώ για το σχόλιο. Ελπίζω να γράψω μερικά ακόμη. 🙂

  2.   Marian dijo

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

    Έχετε σκεφτεί να συλλέξετε όλες τις αναρτήσεις σεναρίου; Ταξινομημένο σε pdf θα έκανε ένα εξαιρετικό εγχειρίδιο.

    Ευχαριστώ και σας ευχαριστώ πολύ!

    1.    hexborg dijo

      Ευχαριστώ πολύ!! Δεν είναι κακή ιδέα. Προς το παρόν υπάρχουν μόνο δύο, αλλά θα το σκεφτώ αργότερα. 🙂

  3.   Κίεφ dijo

    πολύ καλό άρθρο, 5+.

    1.    hexborg dijo

      Ευχαριστώ. Χαίρομαι που σου αρέσει. 🙂

  4.   Sebastian dijo

    Εξοχος! Πρέπει να αλλάξω την ακόλουθη έκφραση και δεν ξέρω πώς να το κάνω:
    192.168.0.138/Διακομιστής από 192.168.0.111/δεδομένα
    Το πρόβλημα έγκειται στο σύμβολο "/".
    Χρησιμοποιώ την εντολή:
    εύρημα. -όνομα "* .txt" -exec sed -i's / TEXT1 / TEXT2 / g '{} \;
    Τι χρησιμοποιείται για την εκτέλεση αυτού του τύπου εργασιών αδιάλειπτα, αλλά δεν μπορώ ...
    Ξέρει κανείς πώς πρέπει να το κάνω;
    Hug!
    Seba

    1.    hexborg dijo

      Αυτό που πρέπει να κάνετε είναι να ξεφύγετε από τον χαρακτήρα ως εξής:

      εύρημα. -όνομα "* .txt" -exec sed -i 's / \ / Server / \ / data / g' {} \;

      Μπορείτε επίσης να χρησιμοποιήσετε ένα άλλο διαχωριστικό στο sed. Δεν χρειάζεται να είναι μπαρ. Το Sed επιτρέπει τη χρήση οποιουδήποτε χαρακτήρα. Για παράδειγμα, αυτό θα ήταν σαφέστερο:

      εύρημα. -όνομα "* .txt" -exec sed -i's | / Server | / data | g '{} \;

      Και αν πρόκειται να αντιγράψετε και να επικολλήσετε τις εντολές από αυτό το σχόλιο, προσέξτε με τα εισαγωγικά, ότι το wordpress τις αλλάζει για τις τυπογραφικές. 🙂

      Χαιρετισμούς.

  5.   Sebastian dijo

    Εξαιρετικό!
    Ψάχνω αυτή τη λύση εδώ και πολύ καιρό.
    Εδώ αφήνω την πλήρη εντολή που έχω χρησιμοποιήσει

    εύρημα. -name "* .txt" -exec sed -i's | 192 \ .168 \ .0 \ .238 \ / Server | 192 \ .168 \ .0 \ .111 \ / data | g '{} \;

    Το πλεονέκτημα αυτής της εντολής είναι ότι αλλάζει όλα τα αρχεία .txt (ή την επέκταση που θέλετε) αναδρομικά ... Πρέπει να είστε πολύ προσεκτικοί!
    Αλλά είναι πολύ χρήσιμο !!!

    Λοιπόν, ευχαριστώ για όλα και χίλια συγχαρητήρια σε ολόκληρη την ομάδα.
    Τα διάβασα πάντα από το ταχυδρομείο!
    Αγκαλιές
    Seba