Γαλιλαίος: Η Μάχη στην Αυγή της Σύγχρονης Επιστήμης| Galileo: Fighting in the Dawn of Modern Science
Πίνακας περιεχομένων:
Πολύ συχνά όταν εργάζεστε με αρχεία κειμένου, θα πρέπει να βρείτε και να αντικαταστήσετε συμβολοσειρές κειμένου σε ένα ή περισσότερα αρχεία.
sed
είναι ένα τρέιλερ. Μπορεί να εκτελέσει βασικό χειρισμό κειμένου σε αρχεία και ροές εισροών, όπως αγωγούς. Με το
sed
μπορείτε να αναζητήσετε, να βρείτε και να αντικαταστήσετε, να εισαγάγετε και να διαγράψετε λέξεις και γραμμές. Υποστηρίζει βασικές και εκτεταμένες κανονικές εκφράσεις που σας επιτρέπουν να ταιριάζουν με πολύπλοκα μοτίβα.
, θα μιλήσουμε για το πώς μπορείτε να βρείτε και να αντικαταστήσετε τις συμβολοσειρές με
sed
. Θα σας δείξουμε επίσης πώς να κάνετε μια αναδρομική αναζήτηση και να την αντικαταστήσετε.
Βρείτε και αντικαταστήστε το String με
sed
Υπάρχουν πολλές εκδόσεις
sed
, με ορισμένες λειτουργικές διαφορές μεταξύ τους. Το macOS χρησιμοποιεί την έκδοση BSD και οι περισσότερες διανομές Linux έρχονται προεγκατεστημένες από προεπιλογή του GNU
sed
. Θα χρησιμοποιήσουμε την έκδοση GNU.
Η γενική μορφή αναζήτησης και αντικατάστασης κειμένου χρησιμοποιώντας το
sed
λαμβάνει την ακόλουθη μορφή:
sed -i 's/SEARCH_REGEX/REPLACEMENT/g' INPUTFILE
-
-i
- Από προεπιλογή τοsed
γράφει την έξοδο του στην τυπική έξοδο. Αυτή η επιλογή λέειsed
για να επεξεργαστείτε τα αρχεία στη θέση τους. Εάν παρέχεται μια επέκταση (ex-i.bak) θα δημιουργηθεί αντίγραφο ασφαλείας του αρχικού αρχείου.s
- Η εντολή υποκατάστασης, πιθανώς η πιο χρησιμοποιούμενη εντολή στο sed./ / /
- Χαρακτήρας οριοθέτησης. Μπορεί να είναι οποιοσδήποτε χαρακτήρας, αλλά συνήθως χρησιμοποιείται ο χαρακτήρας (/
).SEARCH_REGEX
- Κανονική συμβολοσειρά ή κανονική έκφραση για αναζήτηση.REPLACEMENT
- Η συμβολοσειρά αντικατάστασης.g
- Παγκόσμια σημαία αντικατάστασης. Από προεπιλογή, τοsed
διαβάζει τη γραμμή αρχείου κατά γραμμή και αλλάζει μόνο την πρώτη εμφάνιση τουSEARCH_REGEX
σε μια γραμμή. Όταν παρέχεται η σημαία αντικατάστασης, όλα τα συμβάντα θα αντικατασταθούν.INPUTFILE
- Το όνομα του αρχείου στο οποίο θέλετε να εκτελέσετε την εντολή.
Είναι μια καλή πρακτική να βάζετε εισαγωγικά γύρω από το επιχείρημα έτσι ώστε οι μετα-χαρακτήρες του κελύφους να μην επεκτείνονται.
Ας δούμε παραδείγματα για τον τρόπο χρήσης της εντολής
sed
για να αναζητήσετε και να αντικαταστήσετε κείμενο σε αρχεία με κάποιες από τις πιο κοινές επιλογές και σημαίες.
Για σκοπούς επίδειξης, θα χρησιμοποιήσουμε το ακόλουθο αρχείο:
file.txt
123 Foo foo foo foo /bin/bash Ubuntu foobar 456
sed -i 's/foo/linux/' file.txt
123 Foo linux foo linux /bin/bash Ubuntu foobar 456
Με τη σφαιρική σημαία αντικατάστασης αντικαθιστώνται όλες οι εμφανίσεις του μοτίβου αναζήτησης:
sed -i 's/foo/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu linuxbar 456
Όπως ίσως έχετε παρατηρήσει, στο προηγούμενο παράδειγμα η υποκατηγορία
foo
στο
foobar
string αντικαθίσταται επίσης. Εάν αυτή δεν είναι η επιθυμητή συμπεριφορά, χρησιμοποιήστε την έκφραση δεσμών λέξεων (
\b
) και στα δύο άκρα της συμβολοσειράς αναζήτησης. Αυτό εξασφαλίζει ότι οι μερικές λέξεις δεν ταιριάζουν.
sed -i 's/\bfoo\b/linux/g' file.txt
123 Foo linux linux linux /bin/bash Ubuntu foobar 456
Για να μην είναι ευαίσθητη η περίπτωση αντιστοίχισης μοτίβου, χρησιμοποιήστε τη σημαία
I
Στο παρακάτω παράδειγμα χρησιμοποιούμε τις σημαίες
g
και
I
:
sed -i 's/foo/linux/gI' file.txt
123 linux linux linux linux /bin/bash Ubuntu linuxbar 456
sed -i 's/\/bin\/bash/\/usr\/bin\/zsh/g' file.txt
Η ευκολότερη και πολύ πιο ευανάγνωστη επιλογή είναι να χρησιμοποιήσετε έναν άλλο χαρακτήρα οριοθέτησης. Οι περισσότεροι άνθρωποι χρησιμοποιούν την κάθετη γραμμή (
|
) ή το τετράγωνο (:), αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε άλλο χαρακτήρα:
sed -i 's|/bin/bash|/usr/bin/zsh|g' file.txt
123 Foo foo foo foo /usr/bin/zsh Ubuntu foobar 456
Μπορείτε επίσης να χρησιμοποιήσετε κανονικές εκφράσεις. Για παράδειγμα, για να αναζητήσετε όλους τους αριθμούς των 3 ψηφίων και να τους αντικαταστήσετε με τον
number
συμβολοσειράς που θα χρησιμοποιούσατε:
sed -i 's/\b\{3}\b/number/g' file.txt
number Foo foo foo foo /bin/bash demo foobar number
Ένα άλλο χρήσιμο χαρακτηριστικό του sed είναι ότι μπορείτε να χρησιμοποιήσετε τον χαρακτήρα ampersand
&
που αντιστοιχεί στο αντιστοιχισμένο μοτίβο. Ο χαρακτήρας μπορεί να χρησιμοποιηθεί πολλές φορές.
Για παράδειγμα, εάν θέλετε να προσθέσετε σγουράκια
{}
γύρω από κάθε 3ψήφιο αριθμό, πληκτρολογήστε:
sed -i 's/\b\{3}\b/{&}/g' file.txt
{123} Foo foo foo foo /bin/bash demo foobar {456}
Τελευταίο αλλά όχι ασήμαντο, είναι πάντα μια καλή ιδέα να κάνετε ένα αντίγραφο ασφαλείας κατά την επεξεργασία ενός αρχείου με
sed
. Για να γίνει αυτό, απλώς παρέχετε μια επέκταση στην επιλογή
-i
. Για παράδειγμα, για να επεξεργαστείτε το
file.txt
και να αποθηκεύσετε το αρχικό αρχείο ως
file.txt.bak
θα χρησιμοποιούσατε:
sed -i.bak 's/foo/linux/g' file.txt
ls
Αναδρομική Εύρεση και Αντικατάσταση
Μερικές φορές θέλετε να αναζητήσετε αναδρομικά καταλόγους για αρχεία που περιέχουν μια συμβολοσειρά και να αντικαταστήσετε τη συμβολοσειρά σε όλα τα αρχεία. Αυτό μπορεί να γίνει χρησιμοποιώντας εντολές όπως το
find
ή
grep
για να βρεθούν αναδρομικά τα αρχεία στον κατάλογο και να διοχετευτούν τα ονόματα των αρχείων στο
sed
.
Η ακόλουθη εντολή θα αναζητήσει αναδρομικά αρχεία στον τρέχοντα κατάλογο εργασίας και θα μεταβιβάσει τα ονόματα αρχείων σε
sed
.
find. -type f -exec sed -i 's/foo/bar/g' {} +
Για να αποφύγετε προβλήματα με αρχεία που περιέχουν χώρο στα ονόματά τους, χρησιμοποιήστε την επιλογή
-print0
που λέει
find
για να εκτυπώσετε το όνομα του αρχείου, ακολουθούμενη από έναν μηδενικό χαρακτήρα και σωλήνα, την έξοδο προς
sed
χρησιμοποιώντας
xargs -0
:
find. -type f -print0 | xargs -0 sed -i 's/foo/bar/g'
Για να αποκλείσετε έναν κατάλογο, χρησιμοποιήστε την επιλογή
-not -path
. Για παράδειγμα, εάν αντικαθιστάτε μια συμβολοσειρά στο τοπικό git repo για να αποκλείσετε όλα τα αρχεία που ξεκινούν με dot (
.
), Χρησιμοποιήστε:
find. -type f -not -path '*/\.*' -print0 | xargs -0 sed -i 's/foo/bar/g'
find. -type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g'
Μια άλλη επιλογή είναι να χρησιμοποιήσετε την εντολή
grep
για να βρείτε αναδρομικά όλα τα αρχεία που περιέχουν το πρότυπο αναζήτησης και στη συνέχεια να διοχετεύσετε τα ονόματα αρχείων σε
sed
:
grep -rlZ 'foo'. | xargs -0 sed -i.bak 's/foo/bar/g'
συμπέρασμα
Αν και μπορεί να φαίνεται περίπλοκο και περίπλοκο, στην αρχή, η αναζήτηση και η αντικατάσταση κειμένου σε αρχεία με
sed
είναι πολύ απλή.
Για να μάθετε περισσότερα σχετικά με τις εντολές
sed
, την επιλογή και τις σημαίες, επισκεφθείτε το εγχειρίδιο του GNU sed και το φροντιστήριο Grymoire sed. Εάν έχετε οποιεσδήποτε ερωτήσεις ή σχόλια, μπορείτε να αφήσετε ένα σχόλιο.
Έχουμε ήδη δει τι είναι τα προσωρινά αρχεία στα Windows. Τα προσωρινά αρχεία στα Windows είναι εκείνα τα αρχεία ανεπιθύμητης αλληλογραφίας των οποίων η χρήση είναι προσωρινή και καθίσταται περιττή όταν ολοκληρωθεί η εργασία. Αυτά τα προσωρινά αρχεία θα πρέπει να διαγραφούν μόλις το πρόγραμμα τερματιστεί. Αλλά αυτό δεν συμβαίνει πάντοτε, οδηγώντας σε σπατάλη του χώρου στο δίσκο.
Ενώ η παρουσία αυτών των Προσωρινών Αρχείων δεν επηρεάζει πραγματικά την απόδοση του λειτουργικού σας συστήματος, η διαγραφή τους περιοδικά είναι απλώς θέμα καλής πρακτικής διατήρησης της οικίας. θα πρέπει να το κάνουμε τακτικά. Πόσο συχνά πρέπει να κάνετε εξαρτάται από το πόσο επιθετικά χρησιμοποιείτε τον υπολογιστή σας. Αλλά για τους περισσότερους χρήστες, πιστεύω ότι η διαγραφή τέτοιων προσωρινών αρχείων τουλάχιστον μία φορά το μήνα θα πρέπει να είναι αρκετά καλή.
Τα ανεπιθύμητα αρχεία είναι αρχεία που παραμένουν στον υπολογιστή σας μετά την εκτέλεση μιας εργασίας. Μερικές φορές, τα Windows ή κάποιο πρόγραμμα χρειάζεται να δημιουργήσει προσωρινά αρχεία κάνοντας κάποια εργασία και στη συνέχεια ξεχάσει να διαγράψει τα προσωρινά αρχεία που δημιούργησε. Με την πάροδο του χρόνου, ο υπολογιστής σας είναι γεμάτος από ανεπιθύμητα αρχεία με τη μορφή προσωρινών αρχείων, αρχείων καταγραφής, αρχείων που έχουν ληφθεί και ανεπιθύμητων / περιττών καταχωρήσεων μητρώου τω
Ανεπιθύμητα αρχεία στα Windows 10
Ας υποθέσουμε ότι έχετε 100 αρχεία .Mp4, 150 αρχεία .mkv, 200 .png εικόνες και κάποια άλλα αρχεία .txt και .docx σε ένα φάκελο. Τώρα, θέλετε να τα οργανώσετε σύμφωνα με τις μορφές αρχείων. Για παράδειγμα, θέλετε να δημιουργήσετε ξεχωριστό φάκελο για βίντεο, εικόνες και έγγραφα. Εάν θέλετε να τα ταξινομήσετε με Extension αρχείου και File Type χειροκίνητα, θα ήταν χρονοβόρα εργασία εάν έχετε χιλιάδες αρχεία σε ένα φάκελο. Πρέπει να τα επιλέξετε πριν μετακινηθείτε. Εάν δημιουργήσετε κάποιο λάθος, τ
Για να σας βοηθήσει με αυτό το πρόβλημα, το