Получить часть названия файла (видимо sed)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

sptica
Сообщения: 126
ОС: Ubuntu

Получить часть названия файла

Сообщение sptica »

Здравствуйте.

Подскажите пожалуйста как можно вытащить в переменную bash из вот такого названия файла "base-6789-11.12.13_14.tar" число 6789, которое однозначно будет идти между двух дефисов? Длинна числа может меняться, но идёт оно всегда между двух дефисов. Пытался в очередной раз рыть sed и в очередной раз глаза лезут на лоб от его синтаксиса, если надо работать со сложными регэкспами :).
Спасибо сказали:
Аватара пользователя
korisk
Сообщения: 205
ОС: Xubuntu

Re: Получить часть названия файла

Сообщение korisk »

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

Re: Получить часть названия файла

Сообщение sptica »

korisk писал(а):
19.07.2011 17:27
можно и без sed:
echo base-6789-11.12.13_14.tar|cut -d"-" -f2

А ведь точно, спасибо! :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Получить часть названия файла

Сообщение sash-kan »

$ 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


sptica писал(а):
19.07.2011 17:24
сложными регэкспами
гхм…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Получить часть названия файла

Сообщение Nazyvaemykh »

sash-kan писал(а):
19.07.2011 19:42
sptica писал(а):
19.07.2011 17:24
сложными регэкспами
гхм…

Предполагаю, что это о всякого рода гнутых расширениях, таких, как плюсик в вашем примере. Такие сложные регэкспы умеет не всякий sed!
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Lan4
Сообщения: 339
Статус: hikki
ОС: Arch

Re: Получить часть названия файла

Сообщение Lan4 »

Nazyvaemykh писал(а):
19.07.2011 20:50
Предполагаю, что это о всякого рода гнутых расширениях, таких, как плюсик в вашем примере. Такие сложные регэкспы умеет не всякий sed!

Ну плюсик можно же заменить на вследствии чего можно убрать -Е.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Получить часть названия файла

Сообщение SLEDopit »

sptica писал(а):
19.07.2011 17:24
Пытался в очередной раз рыть sed и в очередной раз глаза лезут на лоб от его синтаксиса
Да там ничего страшного, просто нужно немножко привыкнуть. (:
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.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Получить часть названия файла

Сообщение sash-kan »

Nazyvaemykh
Lan4
\+
и в случае grep (vs grep -E) и в случае sed (vs sed -r)

Nazyvaemykh писал(а):
19.07.2011 20:50
Предполагаю, что это о всякого рода гнутых расширениях, таких, как плюсик в вашем примере.
почитайте на досуге Фриддла google://фриддл регулярные выражения· говорят, помогает…
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Получить часть названия файла

Сообщение watashiwa_daredeska »

sash-kan писал(а):
20.07.2011 00:08
и в случае sed (vs sed -r)

user@localhost

$ echo 'a111b' | sed 's/[0-9]\+//g' ab $ echo 'a111b' | sed --posix 's/[0-9]\+//g' a111b

Так что «\+» — это тоже гнутое расширение.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: Получить часть названия файла

Сообщение /dev/random »

watashiwa_daredeska писал(а):
20.07.2011 01:24
Так что «\+» — это тоже гнутое расширение.

\+ - да, + - нет. POSIX Extended Regular Expressions (в отличие от POSIX Basic Regular Expressions) поддерживает +, ? и |. В GNU их аналоги впихнули и в базовые (только с бэкслэшем), но в расширенных они (без бэкслэшей) требуются стандартом.

PS: О. sash-kan, спасибо. Действительно, в sed поддержка ERE стандартом не требуется.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Получить часть названия файла

Сообщение sash-kan »

watashiwa_darede...
да что ж вы все такие прямо негнутые? (улыбка)
ну да, в posix написали, что sed-у положены только бэйсик-re, значит, ежели кто добавит те же posix-овские _не_-бэйсик-re, то это, конечно, _не_иначе_ как от лукавого из gnu· логично-логично·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Получить часть названия файла

Сообщение watashiwa_daredeska »

sash-kan писал(а):
20.07.2011 02:27
ну да, в posix написали, что sed-у положены только бэйсик-re, значит, ежели кто добавит те же posix-овские _не_-бэйсик-re, то это, конечно, _не_иначе_ как от лукавого из gnu· логично-логично·
Это просто надо учитывать при написании переносимых скриптов. Хотя большинство своих личных скриптов я пишу с использованием гнутых расширений и даже частенько (о, ужас) для /bin/bash, а не для /bin/sh :)
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Получить часть названия файла

Сообщение sash-kan »

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: Получить часть названия файла

Сообщение drBatty »

sptica писал(а):
19.07.2011 17:24
Подскажите пожалуйста как можно вытащить в переменную :drunk:bash из вот такого названия файла "base-6789-11.12.13_14.tar" число 6789,

$

$ X="base-6789-11.12.13_14.tar" $ echo ${X#*-} 6789-11.12.13_14.tar $ Y=${X#*-} $ echo ${Y%%-*} 6789

http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: