Вопрос по программированию в bash
Вопрос по программированию в bash
Подскажите пожалуйста, как реализовать на sh(bash):
Есть строка ну, например, "package-1.0.1-1.tgz" и из нее вытащить расширение, т.е. "tgz".
Желательно рабочий пример.
П.С. Есть ли какя-нить функция или еще что позволяющая определить длинну строки?
Есть строка ну, например, "package-1.0.1-1.tgz" и из нее вытащить расширение, т.е. "tgz".
Желательно рабочий пример.
П.С. Есть ли какя-нить функция или еще что позволяющая определить длинну строки?
читайте маны, они рулез
Код: Выделить всё
name="package-1.0.1-1.tgz"
ext=`echo $name|sed 's/^.*\.\([A-Za-z0-9]\+\)$/\1/g'`
echo $ext
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...
-
- Неотъемлемая часть форума
- Сообщения: 434
- Зарегистрирован: 12 апр 2004, 11:00
- Откуда: г. Владивосток
- Контактная информация:
Чисто на bash'е
Если fullname="name.ext1.ext2" это не сработает. В этом случае будет чуть сложнее. 
Код: Выделить всё
fullname="name.ext"
name=${fullname/.*/}
ext=${fullname/*./}
length=${#fullname}

-
- Неотъемлемая часть форума
- Сообщения: 434
- Зарегистрирован: 12 апр 2004, 11:00
- Откуда: г. Владивосток
- Контактная информация:
Код: Выделить всё
ext=${fullname/*./}
name=${fullname/%.$ext/}
- invox
- Неотъемлемая часть форума
- Сообщения: 395
- Зарегистрирован: 12 сен 2002, 17:53
- Откуда: Минск
- Контактная информация:
Приятно послушать умного человекаКод: Выделить всё
ext=${fullname/*./} name=${fullname/%.$ext/}
Водятся же еще на земле такие уникумыВообще то, я это все из man bash выковыриваю:)
Снимаю шляпу
PS. Сегодня заходил на одну страничку, на которой раздавались линуксовые советы. В одном из них для выполнения довольно простой сортировки содержимого файла на полном серьезе предлагалось использовать небольшой _скрипт_ на Perl, исходник прилагался.
Хотя на самом деле достаточно было бы почитать man sort.
Я до сих пор под впечатлением
-
- Неотъемлемая часть форума
- Сообщения: 434
- Зарегистрирован: 12 апр 2004, 11:00
- Откуда: г. Владивосток
- Контактная информация:
По заветам Ильича, оказывается, вообще все просто:)
Теперь к портабельности точно не придраться:)
P.S. Интересно, количество способов, которыми в Linux можно решить эту задачу, оно, хотя бы, конечно?
Код: Выделить всё
name=${fullname%.*}
ext=${fullname##*.}
len=${#fullname}
P.S. Интересно, количество способов, которыми в Linux можно решить эту задачу, оно, хотя бы, конечно?