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

Добавлено: 17 авг 2004, 21:31
Anonymous
Спасибо всем.
2Michael:
твой способ у меня работает и с fullname="name.ext1.ext2"...
Добавлено: 18 авг 2004, 10:04
michael
В этом случае теряется ext1. Вообще, надо определиться, какую точку считать разделителем: первую или последнюю.
Добавлено: 18 авг 2004, 11:54
Anonymous
последнюю
Добавлено: 18 авг 2004, 15:29
michael
Код: Выделить всё
ext=${fullname/*./}
name=${fullname/%.$ext/}
Вообще то, я это все из
man bash выковыриваю:)
Добавлено: 19 авг 2004, 00:22
invox
Код: Выделить всё
ext=${fullname/*./}
name=${fullname/%.$ext/}
Приятно послушать умного человека
Вообще то, я это все из man bash выковыриваю:)
Водятся же еще на земле такие уникумы
Снимаю шляпу
PS. Сегодня заходил на одну страничку, на которой раздавались линуксовые советы. В одном из них для выполнения довольно простой сортировки содержимого файла на полном серьезе предлагалось использовать небольшой _скрипт_ на Perl, исходник прилагался.
Хотя на самом деле достаточно было бы почитать man sort.
Я до сих пор под впечатлением
Добавлено: 19 авг 2004, 10:38
mend0za
а я все по старинке, в терминах POSIX-compliant окружения
PS: не люблю юзать левые расширения, портабельность уходит
Добавлено: 19 авг 2004, 10:40
Llama
mend0za, и куда еще не портирован bash?
Добавлено: 19 авг 2004, 11:45
mend0za
/bin/sh установлен везде
в отличие от bash
и заниматься установкой его на машинах, где я не администратор - занятие пустое
тем более что мой рабочий shell - korn
Добавлено: 19 авг 2004, 16:47
michael
В вопросе было слово bash... Кстати, а где есть описание sh?
Добавлено: 19 авг 2004, 17:07
mend0za
Добавлено: 19 авг 2004, 17:55
michael
По заветам Ильича, оказывается, вообще все просто:)
Код: Выделить всё
name=${fullname%.*}
ext=${fullname##*.}
len=${#fullname}
Теперь к портабельности точно не придраться:)
P.S. Интересно, количество способов, которыми в Linux можно решить эту задачу, оно, хотя бы, конечно?