The UNIX and Linux Forums  


Go Back   UNIXおよびLinuxフォーラム > トップフォーラム > シェルプログラミングとスクリプティング
Googleのunix.com



シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。

その他のUNIXおよびLinuxフォーラムトピックは参考にすること
スレッド スレッドスターター フォーラム 返信 最後の投稿
awkはgzcatにして新しいファイル名ファイル名とプロセスの変更 timj123 シェルプログラミングとスクリプティング 6 2008年6月23日 08:45午前
ファイル名の一部 flame_eagle シェルプログラミングとスクリプティング 8 2008年2月28日 11:18午前
レポートの重複ファイルのファイル名の一部を基に sudheshnaiyer UNIXのダミー質問と回答のため 1 2007年12月18日 04:31午後
スクリプト内のリストからファイル名の一部を読む happyv シェルプログラミングとスクリプティング 3 2006年10月20日 10:58午前
ファイル名から数字の部分を除去するために募集 ソナ UNIXのダミー質問と回答のため 8 2006年7月20日 03:49午後

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2008年11月17日
mainegate mainegate is offline
登録ユーザー
  
 

参加日: 2007年8月
投稿: 23
ファイル名の部分を検出

私は、ファイル名の冒頭には、 2008年9月1日の形式で日付があるのが好きだ。次に私は、私のファイル名は後にしてハイフンでつなぐ。

私は、私にとって、このスクリプトを作成している。しかし、私のファイルは、すでにそこにあるとされる日付書式が既に2回の日があるのでしたくない作業することがあります。あるコードを検出したり、何かのファイル名の先頭にある場合はその日をカットする方法はありますか?
  #2固定リンク)  
Old 2008年11月17日
ジムマクナマラ jim mcnamara is offline Forum Staff  
...@...
  
 

参加日: 2004年2月
場所: NM
投稿数:5787

コード:
filename=2008-11-10-myfilename
newfilename=${filename##*-}
echo $newfilename

  #3固定リンク)  
Old 2008年11月17日
cfajohnson's Avatar
cfajohnson cfajohnson is offline Forum Advisor  
シェルプログラマは、著者
  
 

参加日: 2007年3月
場所:トロント、カナダ
投稿数: 2361


コード:
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

〜でない $ (ファイル名##*-}がある場合は、ファイル名、のバランスにハイフンがない場合、または日ですが、その名にハイフンは、そのように失敗します。
  #4固定リンク)  
Old 2008年11月17日
ジムマクナマラ jim mcnamara is offline Forum Staff  
...@...
  
 

参加日: 2004年2月
場所: NM
投稿数:5787
は、これに代えて、日付散らかっている

コード:
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の代わりに。技術的に修正されたクリスは間違いない-制限されていますが、上記の有用性。一部ではこの日のために建設されているようだ-と、上記の正規表現は完璧ではない。 2008-19-19一日になると思うんですよ-これではありません。最も正しい日付正規表現している数百の文字長い。金本位制校正のみの出力を参照することです。


私たちは(非常に)古い日付を検証するための簡略化アルゴリズムの一部を以下に、この日付を確認します。これはほぼ完了です& &ストレート、シェルの実装が正しいが、大抵の正規表現を使用しているそうだ。私は故意に除外



コード:
/* 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;
}

これで頑張ってください。
  #5固定リンク)  
Old 2008年11月18日
mainegate mainegate is offline
登録ユーザー
  
 

参加日: 2007年8月
投稿: 23
みんなありがとう。私はクリスのソリューションとなった。それはあなたのように制限されているジムだ(正確な構文については仕事をしなければならない)が必要とジムを解決方法は、初心者は私の頭を超えています!私が何をしているクリスのは罰金を尽くします。皆さんに感謝する。
Closed Thread

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 03:26午後


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0