The UNIX and Linux Forums  
Здравствуйте и добро от Соединенных Штатов UNIX и Linux Форумы! Благодарим Вас за посещение и вступления нашей мирового сообщества.

Go Back   В UNIX и Linux Форумы > Топ форумы > Shell программирование и сценарии
.
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

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered By Powered by Google
 
LinkBack Резьба Инструменты Искать в этом Thread Оценить Thread Режимы дисплея
Old 11-17-2008
mainegate mainegate is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2007
Сообщений: 23
выявление часть файла

Мне нравится иметь дату в формате 2008-09-01 в начале моих файлов. Затем я hyphenate после этого, и тогда мое имя файла.

У меня есть сценарий, который создает это для меня. Тем не менее, я могу работать над файлами, которые уже имеют на сегодняшний день формате уже существует, и поэтому я не хочу иметь дату дважды. Есть ли способ обнаружить числа или что-то в начале этого файла и, если да то вырезал дату?
Old 11-17-2008
Джим Макнамара jim mcnamara is offline Forum Staff  
...@...
  
 

Регистрация: Февраль 2004
Местонахождение: Н. М.
Сообщения: 5763
Код:
filename=2008-11-10-myfilename
newfilename=${filename##*-}
echo $newfilename
Old 11-17-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell программист, автор
  
 

Регистрация: Mar 2007
Место проведения: Торонто, Канада
Сообщения: 2361

Код:
filename=2008-11-17-qwerty-uiop
dpat=[12][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
newfilename=${filename#$dpat-}
echo $newfilename
Не $ (FILENAME ##*-}, А если этого не существует дефис в балансе из файла, или, если нет даты, но есть дефис в имени.
Old 11-17-2008
Джим Макнамара jim mcnamara is offline Forum Staff  
...@...
  
 

Регистрация: Февраль 2004
Местонахождение: Н. М.
Сообщения: 5763
Это было, вместо этого, сроки беспорядочна
Код:
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;
}
Удачи вам в этом.
Old 11-18-2008
mainegate mainegate is offline
Зарегистрированный пользователь
  
 

Регистрация: август 2007
Сообщений: 23
Спасибо, ребята. Я пошел с Крисом решение. Она сводится, как ты сказал Джим (вы должны иметь точный синтаксис для его работы), но Джим вашего решения образом над моей головой для новичка! За то, что я делаю Крис воли делать только штрафом. Спасибо всем вам.
Closed Thread

Закладки

Резьба Инструменты Искать в этом Thread
Искать в этом Thread:

Расширенный поиск
Режимы дисплея Оценить эту ветку
Оценить эту ветку:

Отправка Правила
Вы не может Начать новую нитей
Вы не может Почтовые ответы
Вы не может Почтовые вложения
Вы не может Редактировать Ваши сообщения

BB код быть На
Смайлики являемся На
[IMG] код На
HTML-код Вне
Trackbacks являемся На
Pingbacks являемся На
Refbacks являемся На




Часовой пояс GMT -4. Текущее время 01:05 AM.


Powered By: Справка, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Язык Переводы на питание от .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
В UNIX и Linux форумы Содержание Copyright © 1993-2009. Все права Reserved.Ad управления по RedTyger

Содержание соответствующие URL-адреса в vBSEO 3.2.0