URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7045
[ Назад ]

Исходное сообщение
"Выделить дату из имени файла"

Отправлено A.Undegro , 18-Дек-07 09:26 
Уважаемые!!!
Пишу на shell скрипт который экспортирует тучу файлов в бд;
Файлы вида "ft-v05.2007-12-12.235500+0500" (netflow);
Нужно из имени файла в переменную $date выделить дату чтоб получилось
$date='2007-12-12';
Я так полагаю что делать это нужно через "expr $date : 'regexp'"
но с регвыражениями у меня туговато (пока).
Как это можно сделать? Заранее спасибо!!!

Содержание

Сообщения в этом обсуждении
"Выделить дату из имени файла"
Отправлено AMDmi3 , 18-Дек-07 09:59 
>но с регвыражениями у меня туговато (пока).
>Как это можно сделать? Заранее спасибо!!!

...
4 место занимает дубовый вариант с sed и basic regular expressions

% echo ft-v05.2007-12-12.235500+0500 | sed -e 's|.*\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\).*|\1|'
2007-12-12

3 место занимает опять таки sed с extended regular expressions

% echo ft-v05.2007-12-12.235500+0500 | sed -Ee 's|.*([0-9]{4}-[0-9]{2}-[0-9]{2}).*|\1|'
2007-12-12

2 место занимает grep -o с extended regexp (но вроде на некоторых системах grep -o не работает)

% echo ft-v05.2007-12-12.235500+0500 | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}'
2007-12-12

наконец, сегодняшний победитель - cut. Вообще без регулярных выражений

% echo ft-v05.2007-12-12.235500+0500 | cut -b 8-17
2007-12-12


"Выделить дату из имени файла"
Отправлено A.Undegro , 18-Дек-07 10:04 
ОГРОМНЕЙШЕЕ СПАСИБО БУМ ПРОБОВАТЬ!!!!

"Выделить дату из имени файла"
Отправлено Аноним , 19-Дек-07 03:31 
Угу :)

Только перед тем как это применять проверь с датами чтобы день или месяц были менее 10.
Если генерится 2007-07-07 работать будет. Если 2007-7-7 (привеД вантузятнеГам! :) - нет ...

GR.


"Выделить дату из имени файла"
Отправлено A.Undegro , 19-Дек-07 07:18 
>Угу :)
>
>Только перед тем как это применять проверь с датами чтобы день или
>месяц были менее 10.
>Если генерится 2007-07-07 работать будет. Если 2007-7-7 (привеД вантузятнеГам! :) - нет
>...
>
>GR.

Net flow в нормальном формате к счастью делает т/е/ с нулями!!! Скрипт уже написан и робит! Всем спасибо за ответы!!!


"Выделить дату из имени файла"
Отправлено Гость , 19-Дек-07 08:54 
>Если генерится 2007-07-07 работать будет. Если 2007-7-7 (привеД вантузятнеГам! :)

Эм, есть софт, который так делает?!


"Выделить дату из имени файла"
Отправлено L0n3R4ng3r , 10-Янв-08 16:31 
>[оверквотинг удален]
>2 место занимает grep -o с extended regexp (но вроде на некоторых
>системах grep -o не работает)
>
>% echo ft-v05.2007-12-12.235500+0500 | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}'
>2007-12-12
>
>наконец, сегодняшний победитель - cut. Вообще без регулярных выражений
>
>% echo ft-v05.2007-12-12.235500+0500 | cut -b 8-17
>2007-12-12

а как же awk тоже между прочим без регекспов
echo ft-v05.2007-12-12.235500+0500 | awk -F. '{print $2}'
2007-12-12


"Выделить дату из имени файла"
Отправлено Slimm , 25-Дек-07 16:41 
>Уважаемые!!!
>Пишу на shell скрипт который экспортирует тучу файлов в бд;
>Файлы вида "ft-v05.2007-12-12.235500+0500" (netflow);
>Нужно из имени файла в переменную $date выделить дату чтоб получилось
>$date='2007-12-12';
>Я так полагаю что делать это нужно через "expr $date : 'regexp'"
>
>но с регвыражениями у меня туговато (пока).
>Как это можно сделать? Заранее спасибо!!!

а разве в данных netflow нету даты???


"Выделить дату из имени файла"
Отправлено stas , 23-Янв-08 14:52 
>Уважаемые!!!
>Пишу на shell скрипт который экспортирует тучу файлов в бд;
>Файлы вида "ft-v05.2007-12-12.235500+0500" (netflow);
>Нужно из имени файла в переменную $date выделить дату чтоб получилось
>$date='2007-12-12';
>Я так полагаю что делать это нужно через "expr $date : 'regexp'"
>
>но с регвыражениями у меня туговато (пока).
>Как это можно сделать? Заранее спасибо!!!

Можно так:

FILE="ft-v05.2007-12-12.235500+0500"
PARAMS=${FILE/./ }
DATE=${PARAM[1]}

если ничего не напутал. Под рукой сейчас нет bash.


"Выделить дату из имени файла"
Отправлено stas , 24-Янв-08 16:45 
>[оверквотинг удален]
>>но с регвыражениями у меня туговато (пока).
>>Как это можно сделать? Заранее спасибо!!!
>
>Можно так:
>
>FILE="ft-v05.2007-12-12.235500+0500"
>PARAMS=${FILE/./ }
>DATE=${PARAM[1]}
>
>если ничего не напутал. Под рукой сейчас нет bash.

Ошибка вышла. Надо так:
FILE="ft-v05.2007-12-12.235500+0500"
PARAMS=(${FILE//./ })
DATE=${PARAMS[1]}


"Выделить дату из имени файла"
Отправлено Аноним , 24-Янв-08 18:16 
Башизмы лучше вообще не использовать.