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

信じがたいことに世の中には何万行もあるテキストファイルが存在する。そして世の中には、その何万行をひたすら読まなくてはならない人間がいる――私だ。

というかソフトウェア開発者にとってはそれが通常運転、何万行もあるログやデータを黙々と解析してたったひとつの問題を探り当てるのが日常だ。そのさまは常人の目に気の狂った猿として映るかもしれないが、我々は特殊な訓練によってストレスを快楽に変換できるようになった変態なので命に別状はない。

とはいえ、そういったテキストには読む必要のない行が大量に紛れているのが常である。目視で選別していたのではあまりに効率がわるい。ソフトウェア開発者はストレスには耐えられても非効率には耐えられない生き物だ。

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

概要 検索文字列*1
空白行*2 ^\s*?$(\r\n|\r|\n)?
空行*3 ^$(\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)?

*1:改行コードはCRLF、CR、LF全てを対象にしています。
*2:空白行:改行のみ、または空白文字と改行のみの行。
*3:空行:改行のみの行。

使い方

  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以外のログが消えました。めでたし。

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

↓ 好評につきツールにしてみました。
ツール|テキストから指定条件の行を削除


矢野ヒロタ /1988年生まれ。プログラマー、会社員。仕事で培ったWebやスマホアプリの技術を発信すると見せかけてもっぱら妄想を綴っています。よしなに。