JP
/
EN

正規表現|テキストから条件一致行を削除する

概要正規表現
空行(改行のみの行)^$(\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以外のログが消えました。めでたし。

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

↓ 好評につきツールにしてみました。
テキスト分析