The UNIX and Linux Forums  
Hej og Velkommen fra USA til UNIX og Linux Forums! Tak for dit besøg og deltager i vores globale samfund.

Go Back   UNIX og Linux Forums > Top Forums > Shell Programmering og Scripting
.
google unix.com



Shell Programmering og Scripting Post spørgsmål om ksh, CSH, SH, Bash, Perl, PHP, SED, AWK og ANDRE shell scripts og Shell scriptsprog her.

Mere UNIX og Linux Forum Emner du måske kan finde Helpful
Tråd Thread Starter Forum Svar Last Post
gzcat i awk og derefter ændre FILENAME og behandle nye FILENAME timj123 Shell Programmering og Scripting 6 06-23-2008 07:45 AM
del af et filnavn flame_eagle Shell Programmering og Scripting 8 02-28-2008 11:18 AM
Rapport fra duplikateksemplaret filer baseret på en del af filnavnet sudheshnaiyer UNIX for dummyer Spørgsmål & svar 1 12-18-2007 04:31 PM
læse en del af filnavnet fra listen i scriptet happyv Shell Programmering og Scripting 3 10-20-2006 09:58 AM
Ønskede at fjerne numeriske del af et filnavn Sona UNIX for dummyer Spørgsmål & svar 8 07-20-2006 02: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 Søg denne tråd Rate Thread Display Modes
  #1 (permalink)  
Old 11-17-2008
mainegate mainegate is offline
Registreret Bruger
  
 

Join Date: Aug 2007
Stillinger: 23
afsløre den del af et filnavn

Jeg vil gerne have den dato i 2008/09/01 format i starten af min filnavne. Jeg så orddeling efter det og så har min filnavn.

Jeg har et script, der skaber dette for mig. Dog kan jeg arbejde på filer, der allerede har datoformat, der allerede i dér, og jeg ønsker ikke at have en dato to gange. Er der en måde at opdage nummer eller noget i begyndelsen af filnavnet, og i bekræftende fald derefter skære den dato?
  #2 (permalink)  
Old 11-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.749
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 programmør, forfatter
  
 

Join Date: Mar 2007
Beliggenhed: Toronto, Canada
Stillinger: 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
Ikke $ (filename ##*-}, Som at mislykkes, hvis der er en bindestreg i den resterende del af filnavnet, eller hvis der er nogen dato, men der er en bindestreg i navnet.
  #4 (permalink)  
Old 11-17-2008
jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Beliggenhed: NM
Indlæg: 5.749
Det var i stedet for denne, datoer er rodet
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
Dybest set vil jeg foreslå at navngive hver fil med en førende dato har problemer. forsøge
ls-l stedet. Chris var teknisk korrekt, ingen tvivl om - men nytten af ovenstående er begrænset. I del dette skyldes den måde, datoer er konstrueret - og ovenstående regex er ikke perfekt. Det vil tænke 2008-19-19 er en dato - som det ikke er. Mest korrekte dato regexes er flere hundrede tegn lang. Den eneste guld standard er at henvise til produktion af cal.


Vi bruger en del af denne dato check algoritme nedenfor (forenklet betydeligt) til validering gamle datoer. Dette er mere næsten fuldstændig & & korrekte end de fleste lige shell implementeringer bruger regex sandsynligvis vil være. Jeg bevidst udelukket


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;
}
Held og lykke med dette.
  #5 (permalink)  
Old 11-18-2008
mainegate mainegate is offline
Registreret Bruger
  
 

Join Date: Aug 2007
Stillinger: 23
Thanks guys. Jeg gik med Chris's løsning. Det er begrænset som du sagde Jim (du skal have nøjagtige syntaks for at arbejde), men Jim din løsning er langt over mit hoved for en nybegynder! For hvad jeg gør Chris's vil gøre fint. Tak til jer alle.
Closed Thread

Bogmærker

Thread Tools Søg denne tråd
Søg denne tråd:

Avanceret søgning
Display Modes Bedøm denne tråd
Bedøm denne tråd:

Udstationering Regler
Du kan ikke post nye tråde
Du kan ikke post svar
Du kan ikke post vedhæftede filer
Du kan ikke redigere dine indlæg

BB-kode er
Smilies er
[IMG] koden er
HTML-koden er Slukket
Trackbacks er
Pingbacks er
Refbacks er




Alle tidspunkter er GMT -4. Den tid er nu 08:40 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Oversættelser Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. Alle rettigheder Reserved.Ad Management ved RedTyger

Content Relevant webadresser ved vBSEO 3.2.0