ファイル日付とgrepNo.11477
飯沼 さん 02/02/28 18:19
 
grepを行う際、古いファイルから順に検索を行っているように思われます。
新しいファイルから順にgrepができると便利なのですが無理でしょうか?
あるいはファイル名の降順/昇順でのgrepでもいいのですが。

[ ]
RE:11477 ファイル日付とgrepNo.11483
秀丸担当 さん 02/02/28 18:49
 
>grepを行う際、古いファイルから順に検索を行っているように思われます。
>新しいファイルから順にgrepができると便利なのですが無理でしょうか?
>あるいはファイル名の降順/昇順でのgrepでもいいのですが。

無理ではないと思いますが、ちょっと大変です。
二度手間になってしまいますが、ちょうど行番号が付いているので、
sort.exeがそのまま使えると思います。
grep結果に対して全選択し、[その他]→[プログラム実行]で

sort <con >con

とすると、ソートができます。

[ ]
RE:11483 ファイル日付とgrepNo.11484
飯沼 さん 02/02/28 19:12
 
>>新しいファイルから順にgrepができると便利なのですが無理でしょうか?
>無理ではないと思いますが、ちょっと大変です。
>二度手間になってしまいますが、ちょうど行番号が付いているので、
>sort.exeがそのまま使えると思います。

あ、言葉が足りませんでした。

結果をソートしたいのではなく、例えばログファイルからの検索で、
・検索対象は新しいファイルにあることが多い
・対象が見つかれば、検索は打ち切って構わない
という状況があります。
この場合になるべく早く検索を終了したい、という事なのです。
確かに待っていればgrepは完了するのですが。

もう少し他の方法も含めて考えてみます。

[ ]
RE:11484 ファイル日付とgrepNo.11486
アルビレオ さん 02/03/01 00:42
 
アルビレオです。

>結果をソートしたいのではなく、例えばログファイルからの検索で、
>・検索対象は新しいファイルにあることが多い
>・対象が見つかれば、検索は打ち切って構わない
>という状況があります。
>この場合になるべく早く検索を終了したい、という事なのです。
>確かに待っていればgrepは完了するのですが。

秀丸はgrepの検索順序について特に何も処理はしていません。
Windowsが持っている指定したディレクトリ内のファイル名を探し出す機能を使って
いるだけなので、順番はWindowsが勝手に決めています。
どういう順番かをどうしても見たい場合はコマンドプロンプトで dir コマンドを実
行すると grep などで検索される順番を確かめることができます。

どうしても検索順序を変更したければ、
1.空のフォルダを用意する。
2.検索対象のファイル名リストを作る。
3.検索したい順番にファイル名リストをソート。
4.リスト順にファイルを空のフォルダにコピー。
5.コピー先のフォルダに対してgrep検索を行なう。
といった手順が必要でしょう。
(もっとうまい手があるかも)
空のフォルダに対してコピーを繰り返すと、確実にコピーした順番にファイルが格納
されているわけです。

[ ]
RE:11484 ファイル日付とgrepNo.11490
秀丸担当 さん 02/03/01 17:18
 
>結果をソートしたいのではなく、例えばログファイルからの検索で、
>・検索対象は新しいファイルにあることが多い
>・対象が見つかれば、検索は打ち切って構わない
>という状況があります。
>この場合になるべく早く検索を終了したい、という事なのです。
>確かに待っていればgrepは完了するのですが。

たしかに、そのような場合、順番が指定できると便利かもしれません。
検討しておきます。

[ ]
RE:11486 ファイル日付とgrepNo.11492
安久津 さん 02/03/01 21:51
 
>>結果をソートしたいのではなく、例えばログファイルからの検索で、
>>・検索対象は新しいファイルにあることが多い
>>・対象が見つかれば、検索は打ち切って構わない
>>という状況があります。
>>この場合になるべく早く検索を終了したい、という事なのです。
>>確かに待っていればgrepは完了するのですが。

● 更新されたファイル順にグレップ
  目的の言葉が見つかったら、すぐに次のファイルの検索を行なう。

● Cygwin
  Cygwin があると一行で済んじゃう。
  対象は *.txt で、探すことばは「foo」

$ ls -tr *.txt | xargs awk '/foo/{printf("%s:%d: %s\n", FILENAME, FNR, $0);
nextfile;}'
>a.tmp

  検索を打ち切ってしまうなら。nextfile; を exit; にする。

● 秀丸だと...。

>dir /a-d/o-d/b *.txt >a.tmp

a.tmp のデータを利用して、ローカルグレップします。
マクロを作ると結構面倒です。(^^;)
タグジャンプ、検索、バックタグジャンプの繰り返しでも良いかも。

$$re = "foo";
  ##c = hidemaruhandle(0);
  tagjump;
  while( result ){
    ##f = hidemaruhandle(0);
    if( ##f == ##c ){
      message "tagjump 失敗。"; endmacro;
    }
    gofiletop;
    searchdown $$re, regular;
    if( result ){
      message "みっけ !"; endmacro;
    }
    setactivehidemaru ##c;
    closehidemaruforced ##f;
    movetolineno 1, lineno + 1;
    tagjump;
  }
  message "なかったよ。";
endmacro;

では。

[ ]