Δεδομένου ενός ονόματος αρχείου της μορφής someletters_12345_moreleters.ext
, θέλω να εξάγω τα 5 ψηφία και να τα βάλω σε μια μεταβλητή.
Έτσι, για να τονίσω το σημείο, έχω ένα όνομα αρχείου με x αριθμό χαρακτήρων, στη συνέχεια μια ακολουθία πέντε ψηφίων που περιβάλλεται από μια απλή υπογράμμιση σε κάθε πλευρά και στη συνέχεια ένα άλλο σύνολο x αριθμού χαρακτήρων. Θέλω να πάρω τον 5ψήφιο αριθμό και να τον βάλω σε μια μεταβλητή.
Ενδιαφέρομαι πολύ για τον αριθμό των διαφορετικών τρόπων με τους οποίους μπορεί να επιτευχθεί αυτό.
Χρησιμοποιήστε cut:
echo 'someletters_12345_moreleters.ext' | cut -d'_' -f 2
Πιο γενική:
INPUT='someletters_12345_moreleters.ext'
SUBSTRING=$(echo $INPUT| cut -d'_' -f 2)
echo $SUBSTRING
Γενική λύση όπου ο αριθμός μπορεί να βρίσκεται οπουδήποτε στο όνομα αρχείου, χρησιμοποιώντας την πρώτη από αυτές τις ακολουθίες:
number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)
Μια άλλη λύση για την εξαγωγή ακριβώς ενός μέρους μιας μεταβλητής:
number=${filename:offset:length}
Εάν το όνομα αρχείου σας έχει πάντα τη μορφή stuff_digits_...
μπορείτε να χρησιμοποιήσετε την awk:
number=$(echo $filename | awk -F _ '{ print $2 }')
Ακόμα μια άλλη λύση για να αφαιρέσετε τα πάντα εκτός από τα ψηφία, χρησιμοποιήστε
number=$(echo $filename | tr -cd '[[:digit:]]')
Υπάρχει επίσης η ενσωματωμένη στο bash εντολή 'expr':
INPUT="someletters_12345_moreleters.ext"
SUBSTRING=`expr match "$INPUT" '.*_\([[:digit:]]*\)_.*' `
echo $SUBSTRING