正規表現で検索した文字列の保存No.15316
神風 さん 03/08/29 08:59
 
正規表現で grep を使用すると、その文字列が含まれる行が新しい Window に表示さ
れますが、行全体ではなくその文字列だけを取り出す方法はないでしょうか。

[ ]
RE:15316 正規表現で検索した文字列の保存No.15318
ENCODINGSHIFTJIS さん 03/08/29 16:52
 
>行全体ではなくその文字列だけを取り出す方法はないでしょうか。
秀丸マクロを書いて実行になります、組込み機能では個数のカウント
くらいです。

作り方は、処理対象のテキストを開きます
次に、収集する新規作成の面を開きます
マクロ>キー操作の記録開始
Ctrl+F (検索 正規表現式を入れて検索ボタン)
Ctrl+C (コピー)
Ctrl+V
リターン
マクロ>キー操作の記録開始
マクロ>キー操作の保存  a.mac
ファイル>開く> a.mac

できた、原型のマクロを手で調整します。
(画面の移動はマクロの記録ができないため)
----------------- プロトタイプ
gofiletop;    // 最初のカーソル位置
while( 1){    // 繰り返し
 searchdown "正規表現式" , regular;
 if( ! result )  endmacro;  // 無ければ終了
      copy;
nexthidemaru;
      paste;
      insertreturn;
prevhidemaru;
}
---------------
とても、高速とは言えないが、最初はこんなものです。

[ ]
RE:15316 正規表現で検索した文字列の保存No.15319
秀丸担当 さん 03/08/29 18:40
 
>正規表現で grep を使用すると、その文字列が含まれる行が新しい Window に表示さ
>れますが、行全体ではなくその文字列だけを取り出す方法はないでしょうか。

秀丸の機能としてはありませんが、マクロを利用したりすることでできると思い
ます。
ENCODINGSHIFTJISさんの言われているようなgrepに似た動作をするマクロや、
grep結果から検索文字列だけを抽出したりすればできると思います。

安直に置換を利用しても、簡単にできます。
grep結果に対して以下のマクロを実行することできます。
ただし1行に2回以上ヒットしてる場合は、もともとの検索文字列に \n や ^
や $ を含む場合はできないですが。

$s = searchbuffer;
#f = searchoption;
replaceallfast "^.+\\([0-9]+\\): \\f.*\\f" + $s + "\\f.*$", "\\0\\2",
regular;
setsearch $s, #f;

[ ]