The UNIX and Linux Forums  
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.

Go Back   Les systèmes UNIX et Linux Forums > Top Forums > De programmation et de script Shell
.
google unix.com



De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici.

Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
Fil Thread Starter Forum Réponses Last Post
gzcat en awk et puis changer le nom de fichier et de nouveaux processus FILENAME timj123 De programmation et de script Shell 6 06-23-2008 08:45 AM
partie d'un nom de fichier flame_eagle De programmation et de script Shell 8 02-28-2008 11:18 AM
Rapport de la duplication des fichiers basés sur une partie du nom du fichier sudheshnaiyer UNIX pour les nuls Questions et réponses 1 12-18-2007 04:31 PM
lire une partie du nom de fichier de la liste dans le script happyv De programmation et de script Shell 3 10-20-2006 10:58 AM
Recherché pour éliminer la partie numérique d'un nom de fichier Sona UNIX pour les nuls Questions et réponses 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 Tools Recherche sur ce Thread Rate Thread Modes d'affichage
  #1 (permalink)  
Old 11-17-2008
mainegate mainegate is offline
Registered User
  
 

Join Date: Aug 2007
Posts: 23
la détection de la part d'un nom de fichier

J'aime avoir la date dans le format 2008-09-01 au début de mes fichiers. J'ai ensuite, après que les césures et alors mon nom de fichier.

J'ai un script qui crée pour moi. Cependant, je mai travailler sur des dossiers qui ont déjà le format de la date déjà là et je ne veux pas avoir un jour à deux reprises. Existe-t-il un moyen de détecter un nombre ou au début du nom du fichier et, si oui, puis découpez la date?
  #2 (permalink)  
Old 11-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Lieu: NM
Posts: 5762
Code:
filename=2008-11-10-myfilename
newfilename=${filename##*-}
echo $newfilename
  #3 (permalink)  
Old 11-17-2008
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
Shell programmeur, auteur
  
 

Join Date: Mar 2007
Lieu: Toronto, Canada
Messages: 2361

Code:
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
Pas $ (filename ##*-}, Ce qui n'est pas le cas il ya un trait d'union dans la balance le nom du fichier, ou si il n'y a pas de date mais il ya un trait d'union dans le nom.
  #4 (permalink)  
Old 11-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Lieu: NM
Posts: 5762
C'est là, au lieu de cela, les dates sont salissants
Code:
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
Fondamentalement, je dirais que de nommer tous les fichiers avec un jour a des problèmes. essayer
ls-l place. Chris était techniquement correct, sans doute -, mais l'utilité de la ci-dessus est limitée. En partie, cela est dû à la façon dont les dates sont construites - et de la regex ci-dessus n'est pas parfaite. Il pense 2008-19-19 est une date - qui ne l'est pas. La plupart date regexes sont plusieurs centaines de caractères de long. La seule règle d'or est de se référer à la sortie de cal.


Nous utilisons le cadre de cette date de vérifier l'algorithme ci-dessous (très simplifié) de la validation des anciennes dates. C'est plus près complète et correcte et que la plupart des applications en utilisant directement shell regex sont susceptibles de l'être. J'ai délibérément exclu


Code:
/* 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;
}
Bonne chance à cet égard.
  #5 (permalink)  
Old 11-18-2008
mainegate mainegate is offline
Registered User
  
 

Join Date: Aug 2007
Posts: 23
Merci les gars. Je suis allé avec Chris solution. Elle est limitée, comme vous avez dit Jim (vous devez avoir la syntaxe exacte pour que ça fonctionne), mais Jim votre solution est bien au-dessus de ma tête pour un débutant! Pour ce que je fais de Chris fera très bien. Merci à vous tous.
Closed Thread

Bookmarks

Thread Tools Recherche sur ce Thread
Recherche sur ce Thread:

Recherche avancée
Modes d'affichage Rate this thread
Rate this thread:

Règles de messages
Tu mai pas de nouvelles discussions: nonoui
Tu mai pas envoyer des réponses:
Tu mai pas envoyer des pièces jointes
Tu mai pas modifier vos messages

BB code est Sur
Smilies sont Sur
[IMG] code est Sur
Le code HTML est Hors tension
Trackbacks sont Sur
Pingbacks sont Sur
Refbacks sont Sur




Toutes les heures sont au format GMT -4. Le temps est maintenant 05:07 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traductions Langue Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Les systèmes UNIX et Linux Forums Content Copyright © 1993-2009. Tous droits Reserved.Ad de gestion par RedTyger

Content Relevant URLs par vBSEO 3.2.0