![]() |
Hallo und herzlich Willkommen aus dem UNIX-und Linux-Foren! Vielen Dank für Ihren Besuch und die Teilnahme an unserem Global Community.
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| 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 |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
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? |
|
||||
|
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
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;
}
|
|
||||
|
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.
|
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|