Страница 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 можно решить эту задачу, оно, хотя бы, конечно?