2017-06-22 10 views
1

PSFTPのdirコマンドで生成されたログファイルを解析するために正規表現を使用しようとしています。PSFTP RegExpを使用してDirコマンドからファイル名を取得する方法

例のDir例1

drwxr-xr-x 1 0  0     0 Jun 21 13:13 . 
drwxr-xr-x 1 0  0     0 Jun 21 13:13 .. 
-rw-r--r-- 1 0  0    897 Jun 20 15:02 EQA.txt 
-rw-r--r-- 1 0  0    897 Jun 20 15:06 EQA1.txt 
-rw-r--r-- 1 0  0    897 Jun 16 20:41 Test.txt 
-rw-r--r-- 1 0  0    897 Jun 16 21:46 Test1.txt 
-rw-r--r-- 1 0  0    897 Jun 21 13:13 Test4.txt 
-rw-r--r-- 1 0  0    913 May 31 18:01 test.123456789.txt 
psftp> bye 

例のDir例2

ファイルが古いより6ヶ月であるか、将来にあれば、私は、ネットの周りに見つけたものからそう
drwx------ 2 MikePC-apps users  4096 Apr 5 2016 . 
drwx------ 4 MikePC-apps users  4096 Jan 20 2016 .. 
-rw-r--r-- 1 MikePC-apps users   82 Apr 5 2016 test.txt.$01 
-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.$02 
-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.asc 
-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test1.txt.$01 
-rw-r--r-- 1 MikePC-apps users  1927 Apr 4 2016 test.zip 

、年その日の時間の代わりに表示されます。

たとえば、正規表現:/d/d/s .*.*.*を使用して、ファイル名を取得するsubstring関数を使用しています。

しかし、2番目の例にアプローチする方法はわかりません。 dirコマンドのパラメータがタイムスタンプを含むようにしたいので、同じ正規表現を使用することができます。あるいは、両方の例を扱える別の正規表現があるかもしれません。

多くの感謝!

答えて

0

試してみてください。

  string[] inputs = { 
            "drwxr-xr-x 1 0  0     0 Jun 21 13:13 .", 
            "ddrwxr-xr-x 1 0  0     0 Jun 21 13:13 ..", 
            "d-rw-r--r-- 1 0  0    897 Jun 20 15:02 EQA.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 20 15:06 EQA1.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 16 20:41 Test.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 16 21:46 Test1.txt", 
            "d-rw-r--r-- 1 0  0    897 Jun 21 13:13 Test4.txt", 
            "d-rw-r--r-- 1 0  0    913 May 31 18:01 test.123456789.txt", 
            "drwx------ 2 MikePC-apps users  4096 Apr 5 2016 .", 
            "drwx------ 4 MikePC-apps users  4096 Jan 20 2016 ..", 
            "-rw-r--r-- 1 MikePC-apps users   82 Apr 5 2016 test.txt.$01", 
            "-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.$02", 
            "-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test.txt.asc", 
            "-rw-r--r-- 1 MikePC-apps users   82 Aug 10 2016 test1.txt.$01", 
            "-rw-r--r-- 1 MikePC-apps users  1927 Apr 4 2016 test.zip" 
           }; 

      string pattern = @"^(?'attrib'[^\s]+)\s+(?'links'[^\s]+)\s+(?'owner'[^\s]+)\s+(?'group'[^\s]+)\s+(?'size'[^\s]+)\s+(?'date'.+)\s+(?'filename'[^$]+)$"; 

      foreach (string input in inputs) 
      { 
       Match match = Regex.Match(input, pattern); 
       Console.WriteLine("attrib : '{0}', links : '{1}', owner : '{2}', group : '{3}', size : '{4}', date : '{5}', filename : '{6}'", 
        match.Groups["attrib"].Value, match.Groups["links"].Value, match.Groups["owner"].Value, match.Groups["group"].Value, 
        match.Groups["size"].Value, match.Groups["date"].Value, match.Groups["filename"].Value); 
      } 
      Console.ReadLine(); 
+0

ソリューションのおかげで、 を私は文字列のパターンに '= @" ^パターンを変更する( 'ATTRIB' [^ \ s]は+?)を\ S +( 'リンク'? \ s +(? '' [^ \ s] +)\ s +(? ') これはファイル名として 'test1.txt。$ 01'にも含まれています。 ありがとう – Bonobo

+0

$ 01はファイル名の一部です – jdweng

+0

正規表現 '([^ \ s] +)\ s +([^ \ s] +)\ s +([^ \ s] [Regexr](http:// regexr)で、\ s +([^ \ s] +)\ s +([^ \ s] +)\ s +(。 com /)、[^]のため$で停止しました。 文字列がすでに文に分割されているため、パターンの最後に$が削除されました – Bonobo

関連する問題