複数grep検索No.01396
シオ さん 00/05/24 17:59
 
シオといいます。

秀丸 3.05、JRE32.dll 1.17 を使って、grep検索しています。
メニューから「grepの実行」を押すと、ダイアログが出ます。
そこでは、「ファイル名をフルパスで出力」とあります。
これをマクロの中からでも指定して次のようなことをしたいのですが、
fullpath なんてありませんよね?
どのようにすれば、「ファイル名をフルパスで出力」ができるか
教えてください。

  grep "^[\\s\\t]*class", "*.py", "D:\\work\\project", regular, fullpath;


また、
  grep "^[\\s\\t]*insert", "*.py", "D:\\work\\project", regular, fullpath;
  grep "^[\\s\\t]*select", "*.py", "D:\\work\\project", regular, fullpath;
などと、複数grep検索した結果を1画面に出したいのですが、
できますでしょうか?

よろしくお願いいたします。

[ ]
RE:01396 複数grep検索No.01397
山紫水明 さん 00/05/24 23:06
 
    シオさん こんばんは。

》どのようにすれば、「ファイル名をフルパスで出力」ができるか
》教えてください。
 直接にフルパスで出力するオプションはないので,grep の後でフォルダー名を
追加してはいかがでしょうか。

//--------------------------------------------------------//
grep "^[\\s\\t]*class", "*.py", "D:\\work\\project", regular;
gofiletop;
while(code != eof){
    insert "D:\\work\\project\\";
    golineend2;
    right;
}
endmacro;
//--------------------------------------------------------//

》また、
》などと、複数grep検索した結果を1画面に出したいのですが、
》できますでしょうか?

対象とするファイルの一つをを開いた上で,次のマクロを実行してみたらいかがで
しょう。

//--------------------------------------------------------//
#handle1 = hidemaruhandle(0);
grep "^[\\s\\t]*insert", "*.py", "D:\\work\\project", regular;
changename "greptemp";
#handle2 = hidemaruhandle(0);
grep "^[\\s\\t]*select", "*.py", "D:\\work\\project", regular;
#handle3 = hidemaruhandle(0);
selectall;
copy;
setactivehidemaru #handle2;
paste;
closehidemaruforced #handle3;
endmacro;
//--------------------------------------------------------//

 後者の endmacro の前に,前者の2行目以降を連結して,組み合わせることも可
能です。

 では, (^^)/~
                                        山紫水明


[ ]
RE:01397 複数grep検索No.01399
きいろいまふらあ さん 00/05/25 08:53
 
山紫水明さんどもです。まふです。

>    golineend2;
>    right;

これだと行末移動禁止の場合まずいです。今は、
movetolineno 1, lineno + 1;
で問題なかったと思います。

[ ]
RE:01397 複数grep検索No.01400
シオ さん 00/05/25 13:07
 
山紫水明さん、きいろいまふらさん、こんにちわ。

うまくできました。
これでtagsファイルができます。
ありがとうございました。

[ ]
RE:01399 複数grep検索No.01401
山紫水明 さん 00/05/25 21:15
 
    きいろいまふらあさん こんばんは。

》これだと行末移動禁止の場合まずいです。今は、
》movetolineno 1, lineno + 1;
》で問題なかったと思います。

 あっ,そうでした。そういう環境設定があったのですね。つい自分の設定だけで
考えてしまうところが未熟なんです。(^^)
 ところでこの部分,while で回さなくても,

replaceallfast "^.+:\\f", "D:\\\\work\\\\project\\\\\\0",regular;

でいける筈ですね。

 では, (^^)/~
                                        山紫水明


[ ]
RE:01401 複数grep検索No.01402
きいろいまふらあ さん 00/05/27 01:50
 
まふです。

> あっ,そうでした。そういう環境設定があったのですね。

昔はmovetolinenoで飛べないケースがありましたね。
私は
golineend2;
down;
golinetop2;
こんなんで凌いでいた記憶があります。

>replaceallfast "^.+:\\f", "D:\\\\work\\\\project\\\\\\0",regular;

(@o@)目が回りますね。
ところでこれではgrep結果内に":"があった場合まずいですね。
検索文字列は ^[^:]+\([0-9]+\): てなとこでしょうか?
grep結果に限定するなら全ての行の頭に入れればいいのだから
単に ^. でも充分ですね。

\fを入れなくても検索文字列全体は\0で後方置換できます。

[ ]
RE:01402 複数grep検索No.01403
山紫水明 さん 00/05/27 09:39
 
    きいろいまふらあさん こんにちは。

》grep結果に限定するなら全ての行の頭に入れればいいのだから
》単に ^. でも充分ですね。

 そうでした。あまり考えることもなかった(^^;

》\fを入れなくても検索文字列全体は\0で後方置換できます。

 なるほど,たしかに。
 全部の行頭や行末に何かを付加したいときに使えそうですね。

 では, (^^)/~
                                        山紫水明


[ ]