The UNIX and Linux Forums  

Go Back   A UNIX és Linux Forums > Top Fórumok > Shell programozás és Scripting
.
google unix.com



Shell programozás és Scripting Post kérdések KSH, CSH, SH, Bash, Perl, PHP, SED, AWK ÉS EGYÉB shell szkriptek és shell script nyelvek itt.

Több, UNIX és Linux fórum témák Ön által talált Hasznos
Szál Thread Starter Fórum Válaszok Utolsó hozzászólás
gzcat az awk majd módosítsa FILENAME és folyamat új FILENAME timj123 Shell programozás és Scripting 6 06-23-2008 08:45 AM
része a fájlnév flame_eagle Shell programozás és Scripting 8 02-28-2008 11:18 AM
Jelentés a kettős kép alapján része a fájlnév sudheshnaiyer A UNIX a dummies Kérdések és válaszok 1 12-18-2007 04:31 PM
Olvastam egy része filename a listáról a forgatókönyvben happyv Shell programozás és Scripting 3 10-20-2006 10:58 AM
Wanted megszüntetésére numerikus részt a fájlnév Sona A UNIX a dummies Kérdések és válaszok 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 Téma eszközök Keresés a téma Rate Thread Megjelenítési módok
  #1 (permalink)  
Old 11-17-2008
mainegate mainegate is offline
Regisztrált felhasználó
  
 

Join Date: Aug 2007
Hozzászólások: 23
kimutatására a részét a fájlnév

Szeretném, hogy a dátumot a formátum 2008/09/01 elején én fájlneveket. Aztán elválasztás után, és akkor már én fájlnév.

Van egy szkript, amely létrehozza ezt nekem. Én azonban lehet dolgozni a fájlokat, amelyek már a dátum formátumát már ott és így nem akarom, hogy a dátumot kétszer. Van út-hoz kinyomoz számot, vagy valami elején a fájlnév, és ha igen, majd vágja ki a dátumot?
  #2 (permalink)  
Old 11-17-2008
Jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Helyszín: NM
Hozzászólások: 5.807

Kód:
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 programozó, szerző
  
 

Join Date: Mar 2007
Helyszín: Toronto, Kanada
Hozzászólások: 2380


Kód:
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

Ne $ (filename ##*-}, Mivel ez nem sikerül, ha van egy kötőjel a mérleg a fájlnév, vagy ha nincs dátum, de van egy kötőjel a nevet.
  #4 (permalink)  
Old 11-17-2008
Jim McNAMARA jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Helyszín: NM
Hozzászólások: 5.807
Ez volt helyett ezt, dátumok rendetlen

Kód:
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

Alapvetően azt sugallja, hogy minden file elnevezésére egy vezető időpontot birtokol probléma. próba
az ls-l helyett. Chris technikailag megfelelő-nem kétséges -, de a hasznosságát a fenti korlátozott. Ez részben annak köszönhető, hogy az utat megépíteni dátumok -, és a fenti regex nem tökéletes. Szerintem ez egy dátum 2008-19-19 - ami nem az. A legtöbb helyes dátumot regexes több száz karakter hosszú. Az egyetlen "gold standard", hogy olvassa el a kimeneti cal.


Az általunk használt részét ez az időpont ellenőrzés alatt algoritmus (egyszerűsített nagyban) való igazolására régi dátumokkal. Ez majdnem teljes & & pontos, mint a legtöbb egyenes shell implementáció segítségével regex valószínűleg. Szándékosan nem



Kód:
/* 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;
}

Sok szerencsét ezt.
  #5 (permalink)  
Old 11-18-2008
mainegate mainegate is offline
Regisztrált felhasználó
  
 

Join Date: Aug 2007
Hozzászólások: 23
Köszönet fickók. Mentem Chris megoldása. Ez a korlátozott, mint maga mondta Jim (van szüksége pontos szintaxist, hogy működjön), de Jim a megoldás módja a fejem fölött egy kezdő! Mert mit csinálok Chris megteszi csak finom. Thanks to all of you.
Closed Thread

Könyvjelzõk

Téma eszközök Keresés a téma
Keresés a téma:

Részletes keresés
Megjelenítési módok Rate this thread
Rate this thread:

Posting szabályzat
Ön nem post new threads
Ön nem post válaszok
Ön nem post Csatolmányok
Ön nem szerkeszteni az üzeneteidet

BB kód van Be
Smilies vannak Be
[IMG] kód Be
HTML kód Ki
Trackbacks vannak Be
Pingbacks vannak Be
Refbacks vannak Be




Minden idő GMT -4. Az idő most 09:03 AM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Nyelvre lefordítva Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
A UNIX és Linux Fórum Tartalom Copyright © 1993-2009. Minden jog Reserved.Ad menedzsment RedTyger

Content Relevant URLs by vBSEO 3.2.0