Вопрос по программированию в bash

Все о программировании под *nix
Anonymous

Вопрос по программированию в bash

Сообщение Anonymous »

Подскажите пожалуйста, как реализовать на sh(bash):
Есть строка ну, например, "package-1.0.1-1.tgz" и из нее вытащить расширение, т.е. "tgz".
Желательно рабочий пример.

П.С. Есть ли какя-нить функция или еще что позволяющая определить длинну строки?

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

читайте маны, они рулез

Код: Выделить всё

name="package-1.0.1-1.tgz"
ext=`echo $name|sed 's/^.*\.\([A-Za-z0-9]\+\)$/\1/g'`
echo $ext
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

по второму вопросу: man wc
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

Чисто на bash'е

Код: Выделить всё

fullname="name.ext"
name=${fullname/.*/}
ext=${fullname/*./}
length=${#fullname}
Если fullname="name.ext1.ext2" это не сработает. В этом случае будет чуть сложнее. :)

Anonymous

Сообщение Anonymous »

Спасибо всем.
2Michael:
твой способ у меня работает и с fullname="name.ext1.ext2"...

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

В этом случае теряется ext1. Вообще, надо определиться, какую точку считать разделителем: первую или последнюю.

Anonymous

Сообщение Anonymous »

последнюю

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

Код: Выделить всё

ext=${fullname/*./}
name=${fullname/%.$ext/}
Вообще то, я это все из man bash выковыриваю:)

Аватара пользователя
invox
Неотъемлемая часть форума
Сообщения: 395
Зарегистрирован: 12 сен 2002, 17:53
Откуда: Минск
Контактная информация:

Сообщение invox »

Код: Выделить всё

ext=${fullname/*./}
name=${fullname/%.$ext/}
Приятно послушать умного человека
Вообще то, я это все из man bash выковыриваю:)
Водятся же еще на земле такие уникумы
Снимаю шляпу

PS. Сегодня заходил на одну страничку, на которой раздавались линуксовые советы. В одном из них для выполнения довольно простой сортировки содержимого файла на полном серьезе предлагалось использовать небольшой _скрипт_ на Perl, исходник прилагался.
Хотя на самом деле достаточно было бы почитать man sort.
Я до сих пор под впечатлением

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

а я все по старинке, в терминах POSIX-compliant окружения :)

PS: не люблю юзать левые расширения, портабельность уходит
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

Аватара пользователя
Llama
Неотъемлемая часть форума
Сообщения: 9749
Зарегистрирован: 06 фев 2002, 11:40
Откуда: Менск

Сообщение Llama »

mend0za, и куда еще не портирован bash?
Опыт растет прямо пропорционально выведенному из строя оборудованию

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

/bin/sh установлен везде

в отличие от bash

и заниматься установкой его на машинах, где я не администратор - занятие пустое

тем более что мой рабочий shell - korn
И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

В вопросе было слово bash... Кстати, а где есть описание sh?

Аватара пользователя
mend0za
Неотъемлемая часть форума
Сообщения: 2332
Зарегистрирован: 30 авг 2002, 12:33
Откуда: Minsk

Сообщение mend0za »

И увидел я зверя, выходящего из тундры. И число его было 3.14159265358979324...

michael
Неотъемлемая часть форума
Сообщения: 434
Зарегистрирован: 12 апр 2004, 11:00
Откуда: г. Владивосток
Контактная информация:

Сообщение michael »

По заветам Ильича, оказывается, вообще все просто:)

Код: Выделить всё

name=${fullname%.*}
ext=${fullname##*.}
len=${#fullname}
Теперь к портабельности точно не придраться:)

P.S. Интересно, количество способов, которыми в Linux можно решить эту задачу, оно, хотя бы, конечно?

Ответить