![]() |
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.
|
|
Google unix.com
|
|||||||
| Форумы | Регистрация | Правила форума | Ссылки | Альбомы | ЧАВО | Список участников | Календарь | Поиск | Сегодняшние сообщения | Отметить форумы читать |
| Shell программирование и сценарии Почтовые вопросы о KSH, CSH, SH, BASH, Perl, PHP, SED, AWK и скрипты оболочки и оболочки скриптовых языков здесь. |
Подробнее UNIX и Linux Темы форума можно найти полезные
|
||||
| Нить | Резьба для начинающих | Форум | Ответы | Последнее сообщение |
| gzcat в AWK и затем изменить имя файла и обработки новых FILENAME | timj123 | Shell программирование и сценарии | 6 | 06-23-2008 08:45 AM |
| часть файла | flame_eagle | Shell программирование и сценарии | 8 | 02-28-2008 11:18 AM |
| Доклад дубликатов файлов основан на части файла | sudheshnaiyer | UNIX для чайников Вопросы И Ответы | 1 | 12-18-2007 04:31 PM |
| прочитать часть файла из списка в скрипте | happyv | Shell программирование и сценарии | 3 | 10-20-2006 10:58 AM |
| Требуется ликвидировать числовой части из файла | Сона | UNIX для чайников Вопросы И Ответы | 8 | 07-20-2006 03:49 PM |
![]() |
|
|
LinkBack | Резьба Инструменты | Искать в этом Thread | Оценить Thread | Режимы дисплея |
|
|
|
||||
|
выявление часть файла
Мне нравится иметь дату в формате 2008-09-01 в начале моих файлов. Затем я hyphenate после этого, и тогда мое имя файла.
У меня есть сценарий, который создает это для меня. Тем не менее, я могу работать над файлами, которые уже имеют на сегодняшний день формате уже существует, и поэтому я не хочу иметь дату дважды. Есть ли способ обнаружить числа или что-то в начале этого файла и, если да то вырезал дату? |
|
||||
|
Код:
filename=2008-11-10-myfilename
newfilename=${filename##*-}
echo $newfilename
|
|
||||
|
Это было, вместо этого, сроки беспорядочна
Код:
echo $filename | \
sed 's/\(^[1-2][0-9]\{3\}\)-\([0-1][0-9]\)-\([0-3][0-9]\)-\([A-Z_0-9a-z]*\)/\4/' | read newfilename
if [[ ! -z newfilename ]] ; then
filename=$newfilename
fi
LS-л вместо. Крис был технически правильно никаких сомнений, - но о целесообразности вышеизложенных ограничено. Отчасти это связано с образом датам построены - и выше Regex не является совершенным. Он будет думать 2008-19-19 является дата, - которые он не является. Наиболее правильную дату regexes несколько сотен символов длиной. Единственное золотого стандарта заключается в том, чтобы обратиться к выводу кал. Мы используем часть этой даты проверить алгоритм ниже (значительно упрощена) для проверки старых дат. Это почти полное И И правильным, чем в большинстве прямо корпуса реализаций с использованием Regex, скорее всего, будут. Я намеренно исключены Код:
/* chpdt.c
usage chpdt filename
echo "$filname" | chpdt
*/
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <stdio.h>
#define isleapyr(y) (((y) % 4) == 0 && ((y) % 100) != 0 || ((y) % 400) == 0)
int leap[12]= {31,29,31,30,31,30,31,31,30,31,30,31};
int nleap[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char *date_ok(char *result, char *src)
{
int value=atoi(src);
int month=0;
char *p=src;
int *v=nleap;
if( value >= 1900 && value < 2038 && (p=strchr(p, '-')) != NULL )
{
if(isleapyr(value))
v=leap;
value=atoi(++p);
if(value >= 1 && value < 13 && (p=strchr(p, '-')) != NULL)
{
month=value;
value=atoi(++p);
if( value > 0 && value < v[ month - 1 ] )
if( (p=strchr(p, '-')) != NULL)
result=++p;
}
}
return result;
}
char *name_ok(char *p, char *src)
{
if(src[4]=='-' && src[7]=='-' && src[10]=='-')
p=date_ok(p, src);
return p;
}
int main(int argc, char **argv)
{
int retval=0;
char tmp[PATH_MAX + 2]={0x0};
char *p=NULL;
if (argc < 2)
{
if(fgets(tmp, sizeof(tmp), stdin) ==NULL)
{
perror("I/O error");
retval=1;
};
p=strchr(tmp, '\n');
if(p!=NULL)
*p=0x0;
}
else
(void)strncpy(tmp, argv[1], PATH_MAX);
p=tmp;
if(strlen(tmp) > 10 && !retval) /* will return zero length if string is "date-"*/
p=name_ok(p, tmp);
if( fprintf(stdout, "%s", p) < 0)
{
perror("I/O error");
retval=1;
}
return retval;
}
|
|
||||
|
Спасибо, ребята. Я пошел с Крисом решение. Она сводится, как ты сказал Джим (вы должны иметь точный синтаксис для его работы), но Джим вашего решения образом над моей головой для новичка! За то, что я делаю Крис воли делать только штрафом. Спасибо всем вам.
|
![]() |
| Закладки |
| Резьба Инструменты | Искать в этом Thread |
| Режимы дисплея | Оценить эту ветку |
|
|