Biorąc pod uwagę nazwę pliku w postaci someletters_12345_moreleters.ext
, chcę wyodrębnić 5 cyfr i umieścić je w zmiennej.
Tak więc, aby podkreślić punkt, mam nazwę pliku z x liczbą znaków, a następnie pięciocyfrową sekwencję otoczoną pojedynczym podkreśleniem po obu stronach, a następnie inny zestaw x liczby znaków. Chcę pobrać pięciocyfrowy numer i umieścić go w zmiennej.
Jestem bardzo zainteresowany liczbą różnych sposobów, na jakie można to osiągnąć.
Użyj cut:
echo 'someletters_12345_moreleters.ext' | cut -d'_' -f 2
Bardziej ogólne:
INPUT='someletters_12345_moreleters.ext'
SUBSTRING=$(echo $INPUT| cut -d'_' -f 2)
echo $SUBSTRING
Generyczne rozwiązanie, gdzie numer może być w dowolnym miejscu nazwy pliku, wykorzystujące pierwszy z takich ciągów:
number=$(echo $filename | egrep -o '[[:digit:]]{5}' | head -n1)
Inne rozwiązanie, aby wyodrębnić dokładnie część zmiennej:
number=${filename:offset:length}
Jeśli nazwa pliku zawsze ma format stuff_digits_...
możesz użyć awk:
number=$(echo $filename | awk -F _ '{ print $2 }')
Jeszcze inne rozwiązanie, aby usunąć wszystko oprócz cyfr, użyj
number=$(echo $filename | tr -cd '[[:digit:]]')