Подскажите пожалуйста как можно вытащить в переменную bash из вот такого названия файла "base-6789-11.12.13_14.tar" число 6789, которое однозначно будет идти между двух дефисов? Длинна числа может меняться, но идёт оно всегда между двух дефисов. Пытался в очередной раз рыть sed и в очередной раз глаза лезут на лоб от его синтаксиса, если надо работать со сложными регэкспами
Получить часть названия файла (видимо sed)
Модераторы: /dev/random, Модераторы разделов
-
sptica
- Сообщения: 126
- ОС: Ubuntu
Получить часть названия файла
Здравствуйте.
Подскажите пожалуйста как можно вытащить в переменную bash из вот такого названия файла "base-6789-11.12.13_14.tar" число 6789, которое однозначно будет идти между двух дефисов? Длинна числа может меняться, но идёт оно всегда между двух дефисов. Пытался в очередной раз рыть sed и в очередной раз глаза лезут на лоб от его синтаксиса, если надо работать со сложными регэкспами
.
Подскажите пожалуйста как можно вытащить в переменную bash из вот такого названия файла "base-6789-11.12.13_14.tar" число 6789, которое однозначно будет идти между двух дефисов? Длинна числа может меняться, но идёт оно всегда между двух дефисов. Пытался в очередной раз рыть sed и в очередной раз глаза лезут на лоб от его синтаксиса, если надо работать со сложными регэкспами
-
korisk
- Сообщения: 205
- ОС: Xubuntu
Re: Получить часть названия файла
sptica писал(а): ↑19.07.2011 17:24Здравствуйте.
Подскажите пожалуйста как можно вытащить в переменную bash из вот такого названия файла "base-6789-11.12.13_14.tar" число 6789, которое однозначно будет идти между двух дефисов? Длинна числа может меняться, но идёт оно всегда между двух дефисов. Пытался в очередной раз рыть sed и в очередной раз глаза лезут на лоб от его синтаксиса, если надо работать со сложными регэкспами.
можно и без sed:
echo base-6789-11.12.13_14.tar|cut -d"-" -f2
Registerd Linux user #486684 at http://counter.li.org/
Спасибо сказали:
-
sptica
- Сообщения: 126
- ОС: Ubuntu
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Получить часть названия файла
$ echo base-6789-11.12.13_14.tar | grep -Eo -- '-[0-9]+-' | grep -Eo '[0-9]+'
6789
$ echo base-6789-11.12.13_14.tar | sed -r 's/^.*-([0-9]+)-.*$/\1/'
6789
6789
$ echo base-6789-11.12.13_14.tar | sed -r 's/^.*-([0-9]+)-.*$/\1/'
6789
гхм…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
Nazyvaemykh
- Сообщения: 438
- Статус: Подопытный участник
Re: Получить часть названия файла
Предполагаю, что это о всякого рода гнутых расширениях, таких, как плюсик в вашем примере. Такие сложные регэкспы умеет не всякий sed!
¡ Страсть к разрушению есть творческая страсть!
-
Lan4
- Сообщения: 339
- Статус: hikki
- ОС: Arch
Re: Получить часть названия файла
Nazyvaemykh писал(а): ↑19.07.2011 20:50Предполагаю, что это о всякого рода гнутых расширениях, таких, как плюсик в вашем примере. Такие сложные регэкспы умеет не всякий sed!
Ну плюсик можно же заменить на
Код: Выделить всё
{1,}Blog: hikki-tech
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Получить часть названия файла
Да там ничего страшного, просто нужно немножко привыкнуть. (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
The more you believe you don't do mistakes, the more bugs are in your code.
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Получить часть названия файла
Nazyvaemykh
Lan4
\+
и в случае grep (vs grep -E) и в случае sed (vs sed -r)
Lan4
\+
и в случае grep (vs grep -E) и в случае sed (vs sed -r)
почитайте на досуге Фриддла google://фриддл регулярные выражения· говорят, помогает…Nazyvaemykh писал(а): ↑19.07.2011 20:50Предполагаю, что это о всякого рода гнутых расширениях, таких, как плюсик в вашем примере.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Получить часть названия файла
user@localhost
$ echo 'a111b' | sed 's/[0-9]\+//g'
ab
$ echo 'a111b' | sed --posix 's/[0-9]\+//g'
a111bТак что «\+» — это тоже гнутое расширение.
Мои розовые очки
-
/dev/random
- Администратор
- Сообщения: 5456
- ОС: Gentoo
Re: Получить часть названия файла
\+ - да, + - нет. POSIX Extended Regular Expressions (в отличие от POSIX Basic Regular Expressions) поддерживает +, ? и |. В GNU их аналоги впихнули и в базовые (только с бэкслэшем), но в расширенных они (без бэкслэшей) требуются стандартом.
PS: О. sash-kan, спасибо. Действительно, в sed поддержка ERE стандартом не требуется.
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Получить часть названия файла
watashiwa_darede...
да что ж вы все такие прямо негнутые? (улыбка)
ну да, в posix написали, что sed-у положены только бэйсик-re, значит, ежели кто добавит те же posix-овские _не_-бэйсик-re, то это, конечно, _не_иначе_ как от лукавого из gnu· логично-логично·
да что ж вы все такие прямо негнутые? (улыбка)
ну да, в posix написали, что sed-у положены только бэйсик-re, значит, ежели кто добавит те же posix-овские _не_-бэйсик-re, то это, конечно, _не_иначе_ как от лукавого из gnu· логично-логично·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Получить часть названия файла
Это просто надо учитывать при написании переносимых скриптов. Хотя большинство своих личных скриптов я пишу с использованием гнутых расширений и даже частенько (о, ужас) для /bin/bash, а не для /bin/sh
Мои розовые очки
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: Получить часть названия файла
ну вот, уже откуда-то переносимость вылезла…watashiwa_darede... писал(а): ↑20.07.2011 09:28Это просто надо учитывать при написании переносимых скриптов.
эдак мы сейчас и до проблем создания документации (к этим скриптам) договоримся…
какой кошмар! как ты мог так опуститься?! (улыбка)watashiwa_darede... писал(а): ↑20.07.2011 09:28даже частенько (о, ужас) для /bin/bash, а не для /bin/sh
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Получить часть названия файла
$
$ X="base-6789-11.12.13_14.tar"
$ echo ${X#*-}
6789-11.12.13_14.tar
$ Y=${X#*-}
$ echo ${Y%%-*}
6789