[ 新規に投稿する ]

ヒットした行の次の文字のみ全部取り出すNo.41427
weio32hg さん 24/10/22 21:42 [ コメントを投稿する ]
  秀丸で、数百行のデータがあり、「AAA」という行が散在しているとします。(^AAA$)

そして、AAAという行の次の行を全部取り出したいです。

マクロは書かず、キー操作+検索、または、grepどちらかで可能でしょうか?
[ ]
RE:41427 ヒットした行の次の文字のみ全部取り出すNo.41428
こみやんま さん 24/10/23 00:15 [ コメントを投稿する ]
  >マクロは書かず、キー操作+検索、または、grepどちらかで可能でしょうか?

何系統がありますが、多分手操作で自然だと思うのは

■該当箇所を選択状態にするために...

「検索」で

^AAA\n[^\n]+

といれて、「正規表現」と「大文字小文字を区別」にチェックを入れて、
「すべて検索」の「複数選択」をします。

こうすることで、該当箇所が全部選択状態になるので、これをCTRL+Cでコピー

■AAAを削除するために...

新しいファイルを作成して、そこに先ほどコピーしてたものをCTRL+Vで張り付け、

あとは、普通に

^AAA\n

の削除を置き換えでする。

これが一番自然じゃないですかねぇ。

[ ]
RE:41428 ヒットした行の次の文字のみ全部取り出すNo.41429
こみやんま さん 24/10/23 00:27 [ コメントを投稿する ]
  秀丸に依存するやり方なら、

同様に「検索」で

(?#fulllinematch)(?<=^AAA\n)[^\n]+

として、
同じように「正規表現」「大文字小文字区別」にチェック
「すべて検索」「複数選択」

をすれば対象の行すべてが選択状態になるので、
これをCTRL+Cすれば、
クリップボードに入ってる状態が得たいデータになってます。

(ただこれは秀丸依存の書き方なのでソラで入力はできないかと思います)
[ ]
RE:41429 ヒットした行の次の文字のみ全部取り出すNo.41431
秀丸担当 さん 24/10/23 10:38 [ コメントを投稿する ]
  正規表現を使った場合、こみやんまさんが書かれているような方法で可能です。

正規表現で2行目にヒットする場合については、秀丸エディタヘルプの、
目次− コマンド− 検索系コマンド− 正規表現− \nを使った複数行検索の際の制限について 
のところに詳細があります。

マクロや複雑な正規表現を使わない場合は、簡単には、キー操作の記録と再生があります。
標準のキー割り当てでShift+F1を押して記録を開始します。
例えば、AAAを検索し、下矢印キーやShiftキーで、下の行を選択します。
例えば、[編集]→[追加コピー]をします。
もう一度でShift+F1を押して記録を終了します。
Shift+F2で記録したことを再生します。押しっぱなしにすると連続操作できます。

上記はあくまで簡便にする場合です。
折り返しがあって正確にする場合は[論理行頭に移動]や[論理行末に移動]コマンドを使ったり、[カーソル下(折り返し無視)]コマンドを使ったりします。
クリップボードを頻繁に変えたくない場合は、選択してから[複数選択予約]コマンドして、予約したものを増やしていき、最後に[複数選択予約を選択]コマンドとする方法もあります。
Shift+F2押しっぱなしが大変な量の場合は、[キー操作のリピート再生...]コマンドで指定した条件で自動的に止まる再生ができます。
時間がかかるという場合は、やはりマクロや複雑な正規表現ができたほうがいいです。
[ ]
RE:41431 ヒットした行の次の文字のみ全部取り出すNo.41432
秀丸担当 さん 24/10/23 11:40 [ コメントを投稿する ]
  ちなみに本題とは少しちがうかもしれないですが、複数選択時は左右キーを押すと、複数選択のまま選択の先頭と末尾に移動します。
秀丸エディタの複数選択のカーソル移動は左右キーだけで、他の移動もできるようになるべきだと思っています。
突然動作が変わるわけにはいかなので、互換性の配慮が必要ですが、今後検討していきます。
今回のように論理行頭/行末や次の行とかできるだけでもだいぶん違うと思っています。
(いまやるとしたら、マクロになってしまいますが、getselectedrangeとsetselectionrangeで昔よりは作りやすいですが)
[ ]
RE:41429 ヒットした行の次の文字のみ全部取り出すNo.41433
weio32hg さん 24/10/23 20:21 [ コメントを投稿する ]
  ありがとうございます。


>(?#fulllinematch)(?<=^AAA\n)[^\n]+

こちらのやり方で成功しました。この方法を使用したいと思います。


[ ]
RE:41431 ヒットした行の次の文字のみ全部取り出すNo.41434
weio32hg さん 24/10/23 20:24 [ コメントを投稿する ]
  ありがとうございます。

>標準のキー割り当てでShift+F1を押して記録を開始します。
>例えば、AAAを検索し、下矢印キーやShiftキーで、下の行を選択します。
>例えば、[編集]→[追加コピー]をします。
>もう一度でShift+F1を押して記録を終了します。
>Shift+F2で記録したことを再生します。押しっぱなしにすると連続操作できます。

このやり方だと、自由に応用できてよいと思いました。
大変助かりました。
[ ]

[ 新規に投稿する ]