Χειρισμός κατάρριψης χορδών στο Bash
Όταν εργάζεστε με σενάρια φλοιού, μια κοινή εργασία είναι να χωρίσετε μια συμβολοσειρά με βάση έναν οριοθέτη. Για παράδειγμα, σκεφτείτε μια συμβολοσειρά που περιέχει διευθύνσεις email διαχωρισμένες με ερωτηματικά. Εάν χρειάζεται να επεξεργαστείτε κάθε email ξεχωριστά, είναι απαραίτητο να κατανοήσετε πώς να χωρίσετε αυτήν τη συμβολοσειρά. Αυτό το άρθρο θα σας καθοδηγήσει σε διάφορες μεθόδους για να το πετύχετε αυτό στο Bash.
Θα εξερευνήσουμε λύσεις όπως η χρήση της εντολής «tr» και ο χειρισμός του Διαχωριστή Εσωτερικού Πεδίου (IFS). Στο τέλος, θα μπορείτε να χειρίζεστε αποτελεσματικά τον διαχωρισμό συμβολοσειρών και να επαναφέρετε το IFS στην προεπιλεγμένη τιμή του. Ας βουτήξουμε και ας απλοποιήσουμε τις εργασίες δέσμης ενεργειών του Bash!
Εντολή | Περιγραφή |
---|---|
tr | Μεταφράζει ή διαγράφει χαρακτήρες. Χρησιμοποιείται εδώ για να αντικαταστήσει το ερωτηματικό με έναν χαρακτήρα νέας γραμμής για να χωρίσει τη συμβολοσειρά. |
IFS | Διαχωριστής εσωτερικού πεδίου, που χρησιμοποιείται για τη διαίρεση συμβολοσειρών με βάση έναν συγκεκριμένο οριοθέτη σε σενάρια Bash. |
read -r -a | Διαβάζει μια γραμμή εισόδου και τη χωρίζει σε πίνακα. Η επιλογή -r εμποδίζει τις ανάστροφες κάθετες να ερμηνεύονται ως χαρακτήρες διαφυγής. |
echo | Εκτυπώνει κείμενο στην τυπική έξοδο. Χρησιμοποιείται για την εμφάνιση των διαχωρισμένων στοιχείων συμβολοσειράς. |
split | Μια συνάρτηση Perl που διαιρεί μια συμβολοσειρά σε μια λίστα συμβολοσειρών με βάση έναν καθορισμένο οριοθέτη. |
foreach | Μια δομή βρόχου Perl που επαναλαμβάνεται πάνω από μια λίστα τιμών. |
Κατανόηση των τεχνικών διαχωρισμού χορδών Bash
Το πρώτο σενάριο Bash δείχνει πώς να χωρίσετε μια συμβολοσειρά χρησιμοποιώντας το tr εντολή. Εδώ ορίζουμε μια συμβολοσειρά IN="bla@some.com;john@home.com" και χρήση echo σε συνδυασμό με tr για να μεταφράσετε το διαχωριστικό ερωτηματικό σε χαρακτήρα νέας γραμμής. Αυτό σπάει αποτελεσματικά τη χορδή σε μεμονωμένες γραμμές. ο for Στη συνέχεια, ο βρόχος επαναλαμβάνεται σε κάθε γραμμή, εκτυπώνοντας τις διευθύνσεις μέσα σε αγκύλες. Αυτή η μέθοδος είναι απλή και αξιοποιεί τις ισχυρές δυνατότητες επεξεργασίας κειμένου των εντολών Unix για τον χειρισμό συμβολοσειρών.
Μια άλλη μέθοδος περιλαμβάνει την προσαρμογή του Internal Field Separator (IFS). Με προσωρινή ρύθμιση IFS σε ένα ερωτηματικό, μπορούμε να χωρίσουμε τη συμβολοσειρά σε έναν πίνακα. Διατηρούμε το πρωτότυπο IFS προς την OIFS πριν το τροποποιήσουμε, διασφαλίζοντας ότι μπορούμε να το επαναφέρουμε αργότερα. ο read -r -a εντολή διαβάζει τη συμβολοσειρά εισόδου σε έναν πίνακα που ονομάζεται mails2, χωρίζοντάς το με βάση το τροποποιημένο IFS. Μετά την επεξεργασία, το πρωτότυπο IFS αποκαθίσταται. Αυτή η προσέγγιση παρέχει έναν πιο προγραμματικό τρόπο χειρισμού του διαχωρισμού συμβολοσειρών στο Bash, επιτρέποντάς μας να χρησιμοποιήσουμε πίνακες για περαιτέρω χειρισμό.
Χρήση του Bash για διαίρεση συμβολοσειρών σε οριοθέτη
Σενάριο Bash
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Split string using 'tr' and iterate
mails=$(echo $IN | tr ";" "\n")
for addr in $mails; do
echo "> [$addr]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Διαίρεση συμβολοσειράς στο Bash με χρήση IFS
Σενάριο Bash
#!/usr/bin/env bash
# Input string
IN="bla@some.com;john@home.com"
# Save the original IFS
OIFS=$IFS
# Set IFS to semicolon
IFS=';'
# Split string into an array
read -r -a mails2 <<< "$IN"
# Restore the original IFS
IFS=$OIFS
# Iterate over the array
for x in "${mails2[@]}"; do
echo "> [$x]"
done
# Output:
# > [bla@some.com]
# > [john@home.com]
Χρήση Python για διαχωρισμό συμβολοσειρών
Σενάριο Python
#!/usr/bin/env python3
# Input string
IN = "bla@some.com;john@home.com"
# Split string by semicolon
mails = IN.split(';')
# Iterate and print each element
for addr in mails:
print(f"> [{addr}]")
# Output:
# > [bla@some.com]
# > [john@home.com]
Χρησιμοποιώντας την Perl για να χωρίσετε μια συμβολοσειρά
Σενάριο Perl
#!/usr/bin/env perl
use strict;
use warnings;
# Input string
my $IN = "bla@some.com;john@home.com";
# Split string by semicolon
my @mails = split(';', $IN);
# Iterate and print each element
foreach my $addr (@mails) {
print "> [$addr]\n";
}
# Output:
# > [bla@some.com]
# > [john@home.com]
Προηγμένες τεχνικές διαχωρισμού χορδών στο Bash
Μια άλλη ισχυρή μέθοδος για το διαχωρισμό των χορδών στο Bash περιλαμβάνει τη χρήση του awk εντολή. awk είναι ένα ευέλικτο βοηθητικό πρόγραμμα γραμμής εντολών σχεδιασμένο για σάρωση και επεξεργασία μοτίβων. Μπορεί να είναι ιδιαίτερα χρήσιμο για τον διαχωρισμό συμβολοσειρών επειδή μας επιτρέπει να ορίζουμε προσαρμοσμένα διαχωριστικά πεδίων. Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε awk -F";" '{print $1, $2}' για να χωρίσετε μια συμβολοσειρά με βάση τον οριοθέτη ερωτηματικού και να εκτυπώσετε τα μεμονωμένα στοιχεία. Αυτή η μέθοδος είναι εξαιρετικά ευέλικτη και μπορεί να χειριστεί πιο σύνθετες εργασίες χειρισμού συμβολοσειρών, καθιστώντας την ένα πολύτιμο εργαλείο στην εργαλειοθήκη ενός προγραμματιστή Bash.
Επιπλέον, το cut Η εντολή μπορεί να χρησιμοποιηθεί για τη διαίρεση συμβολοσειρών με βάση οριοθέτες. ο cut Η εντολή χρησιμοποιείται συνήθως για την εξαγωγή τμημάτων από κάθε γραμμή δεδομένων εισόδου. Καθορίζοντας έναν οριοθέτη με το -d επιλογή και επιλέγοντας τα πεδία με το -f επιλογή, μπορούμε αποτελεσματικά να χωρίσουμε και να εξαγάγουμε μέρη μιας συμβολοσειράς. Για παράδειγμα, χρησιμοποιώντας echo $IN | cut -d';' -f1 θα εξάγει την πρώτη διεύθυνση email από τη συμβολοσειρά εισόδου. Αυτές οι προηγμένες μέθοδοι παρέχουν περισσότερο έλεγχο και ακρίβεια για εργασίες χειρισμού συμβολοσειρών στο Bash.
Συνήθεις ερωτήσεις και απαντήσεις σχετικά με το διαχωρισμό συμβολοσειρών στο Bash
- Πώς μπορώ να χωρίσω μια συμβολοσειρά σε έναν οριοθέτη στο Bash;
- Μπορείτε να χρησιμοποιήσετε το IFS μεταβλητή ή εντολές όπως tr, awk, και cut για να χωρίσετε τις χορδές σε έναν οριοθέτη.
- Τι είναι το IFS μεταβλητή στο Bash;
- ο IFS (Internal Field Separator) είναι μια ειδική μεταβλητή που ορίζει τους χαρακτήρες που χρησιμοποιούνται για τον διαχωρισμό του κειμένου εισαγωγής σε λέξεις ή διακριτικά.
- Πώς μπορώ να επαναφέρω το IFS μεταβλητή στην προεπιλεγμένη τιμή του;
- Αποθηκεύστε το πρωτότυπο IFS τιμή πριν την αλλάξετε και επαναφέρετέ την μετά την επεξεργασία: OIFS=$IFS; IFS=';'; ... ; IFS=$OIFS.
- Τι κάνει το tr εντολή do στο splitting συμβολοσειρών;
- ο tr εντολή μεταφράζει ή διαγράφει χαρακτήρες. Μπορεί να αντικαταστήσει τους οριοθέτες με νέες γραμμές για να χωρίσει μια συμβολοσειρά: echo $IN | tr ";" "\n".
- Μπορώ να χωρίσω μια συμβολοσειρά σε έναν πίνακα χρησιμοποιώντας το Bash;
- Ναι, αλλάζοντας το IFS μεταβλητή και χρήση read -r -a, μπορείτε να χωρίσετε μια συμβολοσειρά σε έναν πίνακα: read -r -a array <<< "$string".
- Τι είναι το awk εντολή που χρησιμοποιείται για;
- awk είναι ένα βοηθητικό πρόγραμμα γραμμής εντολών για σάρωση και επεξεργασία μοτίβων. Μπορεί να χωρίσει συμβολοσειρές ορίζοντας προσαρμοσμένα διαχωριστικά πεδίων.
- Πώς το cut εργασία εντολής;
- ο cut εντολή εξάγει τμήματα από κάθε γραμμή εισόδου. Μπορεί να χωρίσει συμβολοσειρές καθορίζοντας έναν οριοθέτη και επιλέγοντας πεδία: echo $string | cut -d';' -f1.
- Γιατί χρησιμοποιεί IFS βοηθά στο διαχωρισμό χορδών;
- Χρησιμοποιώντας IFS σας επιτρέπει να ορίσετε προσαρμοσμένους οριοθέτες για διαχωρισμό συμβολοσειρών, καθιστώντας το ευέλικτο για διαφορετικές μορφές εισόδου.
- Είναι δυνατός ο διαχωρισμός μιας συμβολοσειράς με πολλαπλούς οριοθέτες στο Bash;
- Ναι, μπορείτε να χρησιμοποιήσετε έναν συνδυασμό tr και awk για να χειριστεί πολλαπλούς οριοθέτες.
- Μπορώ να χρησιμοποιήσω sed για διαχωρισμό χορδών στο Bash;
- Ενώ sed είναι κυρίως πρόγραμμα επεξεργασίας ροής, μπορεί να συνδυαστεί με άλλες εντολές όπως awk να χωρίζει τις χορδές έμμεσα.
Τελικές σκέψεις σχετικά με το διαχωρισμό χορδών στο Bash
Η εξοικείωση με τον χειρισμό συμβολοσειρών στο Bash μπορεί να βελτιώσει σημαντικά την αποτελεσματικότητα του σεναρίου σας. Είτε χρησιμοποιείτε IFS για απλούς οριοθέτες ή πιο προηγμένα εργαλεία όπως tr και awk, αυτές οι τεχνικές είναι απαραίτητες για αποτελεσματικό προγραμματισμό Bash. Θυμηθείτε να επαναφέρετε πάντα το πρωτότυπο IFS για να αποφύγετε την απροσδόκητη συμπεριφορά στα σενάρια σας. Με αυτές τις μεθόδους, μπορείτε να χειριστείτε ένα ευρύ φάσμα εργασιών επεξεργασίας συμβολοσειρών στα σενάρια Bash.