The UNIX and Linux Forums  
Hallo und herzlich Willkommen aus dem UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.

Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
gzcat in awk und ändern Sie dann FILENAME und Prozess neue FILENAME timj123 Shell Programmierung und Scripting 6 06-23-2008 08:45 AM
Teil eines Dateinamens flame_eagle Shell Programmierung und Scripting 8 02-28-2008 11:18 AM
Bericht von doppelten Dateien auf der Grundlage Teil des Dateinamens sudheshnaiyer UNIX for Dummies Questions & Answers 1 12-18-2007 04:31 PM
Lesen Sie einen Teil der Datei aus der Liste in das Skript happyv Shell Programmierung und Scripting 3 10-20-2006 10:58 AM
Gesucht, um numerische Teil aus einer Datei Sona UNIX for Dummies Questions & Answers 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 Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 11-17-2008
mainegate mainegate is offline
Registrierte Nutzer
  
 

Join Date: Aug 2007
Beiträge: 23
Ermittlung der Teil eines Dateinamens

Ich mag, dass das Datum im Format 2008-09-01 am Anfang meiner Dateinamen. Ich habe dann nach, dass die Silbentrennung und dann haben meine Dateinamen.

Ich habe ein Skript, das diese für mich. Aber ich kann auf Dateien, die bereits über das Datum in das Format bereits in der es und so möchte ich nicht haben, einen Termin zweimal. Gibt es eine Möglichkeit, zu erkennen oder etwas am Anfang des Dateinamens, und wenn dem so ist, dann schneiden Sie das Datum?
  #2 (permalink)  
Old 11-17-2008
Jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Ort: NM
Posts: 5759
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-Programmierer, Autor
  
 

Join Date: März 2007
Ort: Toronto, Kanada
Beiträge: 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
Nicht $ (filename ##*-}, Da dies nicht, wenn es einen Bindestrich in der Bilanz von den Dateinamen, oder wenn es kein Datum, aber es gibt einen Bindestrich im Namen.
  #4 (permalink)  
Old 11-17-2008
Jim McNamara jim mcnamara is offline Forum Staff  
...@...
  
 

Join Date: Feb 2004
Ort: NM
Posts: 5759
Das war an Stelle dieser Termine sind unordentlich
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
Grundsätzlich würde ich vorschlagen, dass jede Datei mit der Benennung einer der führenden Datum hat Probleme. versuchen
ls-l statt. Chris war technisch-kein Zweifel -, sondern die Nützlichkeit der oben begrenzt ist. Zum Teil ist dies auf die Art und Weise Daten, die - und das über regex ist nicht perfekt. Sie werden denken, 2008-19-19 ist ein Tag - was es nicht ist. Die meisten richtigen Zeitpunkt regulären sind mehrere hundert Zeichen lang sein. Das einzige Gold-Standard ist auf die Ausgabe von Cal.


Wir verwenden Sie den Teil des zu diesem Zeitpunkt prüfen Algorithmus unter (stark vereinfacht) für die Validierung von alten Daten. Dies ist nahezu vollständig und korrekt und gerade, als die meisten Shell-Implementierungen mit regex dürften. Ich habe absichtlich nicht


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;
}
Viel Glück mit diesem.
  #5 (permalink)  
Old 11-18-2008
mainegate mainegate is offline
Registrierte Nutzer
  
 

Join Date: Aug 2007
Beiträge: 23
Danke Jungs. Ich ging mit Chris-Lösung. Es ist begrenzt, wie Sie sagten, Jim (Sie müssen genaue Syntax für sie zu arbeiten), aber Jim Ihre Lösung ist weit über meinen Kopf für einen Anfänger! Für das, was ich tue Chris's reicht völlig aus. Danke an Euch alle.
Closed Thread

Lesezeichen

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 11:31 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0