はじめに

こんにちは!
キャスレーコンサルティングのID(インテグレーション&デザイン)部 岩井です。

業務でさまざまな調査を行う際に、grepを使っています。
そこで出てくるのが、正規表現

『あるフォルダ配下のXXXを使用している(XXXと書いている)YYYファイルを洗い出す』

更に、正規表現を使用して洗い出した結果を
Excelに貼り付けて、可読性を高くするのですが
そちらでも、正規表現を使うことがあります。

ということで、
今回は
「サクラエディタでのgrep結果をExcelに貼り付けるために、正規表現を使って編集する」
というテーマで、ブログを書きます。

大まかには、以下の流れで説明していきます。

1.サクラエディタのgrep結果
2.tabを除去
3.パスと行数列数を分割
4.行数列数とエンコードを分割
5.エンコードと検索行を分割
6.もうちょっと分割

1.サクラエディタのgrep結果

GREP1

サクラエディタのgrep結果は、下記のフォーマットで出力されます。

①ファイルパス … パス
②検索文字列のファイル上の検出行数と列数 … 行数列数
③検出ファイルのエンコーディング … エンコード
④検索文字列の検出行 … 検出行

この4つの正規表現を使って、
Excelにイイ感じに貼り付けられるよう、編集(tab区切り)します。

ということで、最初に11行目から35行目を抜き出しておきましょう。

2.tabを除去

\t

「パス」「行数列数」「エンコード」「検出行」を
tab区切りとして編集する前に、「検出行」に含まれているかもしれない
tabを除去しておきます。

ここで登場するのが、\tです。

\tはtabを表します。

似た表現に
\r\n : 改行(Windows系)
\n : 改行(Unix系)
などがあります。

今回は、tabを半角スペース4文字に置換しておきます。

GREP2

ちなみに、”\t”という文字列を探したい場合は、\\tと書きます。

3.パスと行数列数を分割

\ . (

それでは、tabで区切っていきましょう。

今、
パスの末尾は.html
行数列数の先頭は(です。

ということで

.html(を.html\t ←(は要らないので、除去します!
とすれば良いのですが…これでは上手くいきません。

正規表現で
.は任意の1文字
()で囲んでパターンを表す文字列
を表します。
このように、意味を持つ文字をメタ文字呼びます。
他には
* : 直前の文字列が0個以上続く
+ : 直前の文字列が1個以上続く
[] : 囲んだ文字のいずれか1文字を表す
^ : 行頭 []の中では「以外」を表す
$ : 行末
などがあります(他にもあります)。

そして、
ここでは.と(をそのままの文字(ピリオドと括弧)として扱いたいので、
\を使います。
\をメタ文字の前に書けば、メタ文字をそのままの文字として扱えます。

ということで
\.html\(\.html\tに置換しましょう。

GREP3

GREP4

4.行数列数とエンコードを分割

\ ) [

行数列数とエンコードの間は
) [ ←)[の間に半角スペース2文字

ということで、先ほどのメタ文字のことを踏まえると

\) \[

\t
に置換。

GREP5

GREP6

5.エンコードと検索行を分割

\ ] +

エンコードと検索行の間は
]:  ←:の後に、半角スペース1文字以上が含まれる

:の後の個数が決まっていない、連続する半角スペースを、除去しましょう。

\]: +

\t
に置換。

+:直前の文字列が1個以上続く

GREP7

GREP8

これで、「パス」「行数列数」「エンコード」「検出行」
をtabで分割できました。
Excelに、ペタっと貼り付けましょう。

ちなみに、置換する際は置換した数を確認しておきましょう。
想定外の置換をしていないことを、確認するためです。

6.もうちょっと分割

\ [^] ^ + $ \t

先の章で「パス」「行数列数」「エンコード」「検出行」を
tabで分割できましたが、できれば…パスは「フォルダ」と「ファイル」
行数列数は「行数」と「列数」に分けたいです。

しかし、1回で上手く分割する方法がわかりません…

しかし、Excelに貼り付けた「パス」と「行数列数」を
それぞれ抜き出した後であれば、分割できます。

パス
①「パス」をサクラエディタに貼り付け
\\[^\\]+$を除去 → フォルダ抽出 → Excelへ
③「パス」をサクラエディタに再度貼り付け
^.+\\を除去 → ファイル抽出 → Excelへ

[^\\]+ : ”\”以外の文字列が1文字以上続く

GREP91

GREP92

行数列数
①「行数列数」をサクラエディタに貼り付け
,\tに置換 → Excelへ

GREP93

以上、
パパパっと書いたので、わかりにくい点等あるかもしれませんが、
正規表現を知っている/知らないでは
仕事の効率がすごく変わる(ときもある)と思いますので
皆さんも覚えてみましょう!

最後までお読みいただき、ありがとうございます。