【正規表現】条件に一致した行を削除する

〇〇を削除正規表現(検索文字列)
空行(改行のみの行)^$(\r\n|\r|\n)?
空白行(改行と空白文字のみの行)^\s*?$(\r\n|\r|\n)?
キーワードを含まない行^(?!.*キーワード).*$(\r\n|\r|\n)?
キーワードを含まない行(複数)^(?!.*(キーワード1|キーワード2)).*$(\r\n|\r|\n)?
キーワードを先頭に含まない行^(?!キーワード).*$(\r\n|\r|\n)?
キーワードを末尾に含まない行^(?!.*キーワード$).*$(\r\n|\r|\n)?
キーワードを含む行^.*キーワード.*$(\r\n|\r|\n)?
キーワードを含む行(複数)^.*(キーワード1|キーワード2).*$(\r\n|\r|\n)?
キーワードが先頭に出現する行^キーワード.*$(\r\n|\r|\n)?
キーワードが末尾に出現する行^.*キーワード$(\r\n|\r|\n)?
※改行コードはCRLF、CR、LF全てを対象にしています。

世の中には数万行もあるテキストファイルなんてのが存在する。そして世の中には、それを読まなくてはならない者がいる。私だ。

数万行などプログラマーにとっては通常運転、膨大なログやデータを黙々と解析したったひとつの問題を探り当てるのが日常だ。そのさまは常人の目に気の狂った猿として映るかもしれないが我々はストレスを快楽に変換できる変態なので安心してほしい。

しかしそういったテキストには不要な行が大量に紛れているのが常である。それは困る、我々はストレスには耐えられても非効率には耐えられない。

というわけで、そんなときは正規表現を使うとずいぶん楽になるよというお話です。上記の表からお好みの正規表現を使って検索&一括置換すれば「条件に一致する行」をさっぱり削してくれます。正規表現に拍手。

正規表現の使い方

  1. 正規表現に対応したエディタでファイルを開く(サクラエディタ、秀丸など)。
  2. 検索文字列に表の正規表現を設定する。
  3. 置換文字列を空にする。
  4. 「すべて置換」を実行する。

例えばこんなログがあるとする。

INFO  2018-01-31 15:00:00.000 1234/process1 message
ERROR 2018-01-31 15:00:00.000 1234/process1 message
INFO  2018-01-31 15:00:00.000 4321/process2 message
INFO  2018-01-31 15:00:00.000 1234/process1 message
INFO  2018-01-31 15:00:00.000 4321/process2 message
INFO  2018-01-31 15:00:00.000 1234/process1 message
INFO  2018-01-31 15:00:00.000 4321/process2 message
INFO  2018-01-31 15:00:00.000 4321/process3 message
INFO  2018-01-31 15:00:00.000 4321/process3 message
INFO  2018-01-31 15:00:00.000 1234/process1 message

仮にprocess1のログだけを見たいとした場合、process2やprocess3のログは邪魔である。表の「キーワードを含まない行」を使い、以下の正規表現で一括置換する。

^(?!.*process1).*$(\r\n|\r|\n)?

INFO  2018-01-31 15:00:00.000 1234/process1 message
ERROR 2018-01-31 15:00:00.000 1234/process1 message
INFO  2018-01-31 15:00:00.000 1234/process1 message
INFO  2018-01-31 15:00:00.000 1234/process1 message
INFO  2018-01-31 15:00:00.000 1234/process1 message

process1以外のログが消えました。めでたし。

↓メタ文字の説明はコチラ。
正規表現: メタ文字一覧

↓ 好評につきツールにしてみました。
テキストフィルター


矢野ヒロタ / 1987年生まれ。プログラマー。
趣味で作ったWebツールを公開しています。無料ですのでご自由にお使いください。ブログは技術ネタと見せかけてもっぱら妄想です。よしなに。
© HIROTA YANO