はじめに
こんにちは!
キャスレーコンサルティングのID(インテグレーション&デザイン)部 岩井です。
業務でさまざまな調査を行う際に、grepを使っています。
そこで出てくるのが、正規表現。
『あるフォルダ配下のXXXを使用している(XXXと書いている)YYYファイルを洗い出す』
更に、正規表現を使用して洗い出した結果を
Excelに貼り付けて、可読性を高くするのですが
そちらでも、正規表現を使うことがあります。
ということで、
今回は
「サクラエディタでのgrep結果をExcelに貼り付けるために、正規表現を使って編集する」
というテーマで、ブログを書きます。
大まかには、以下の流れで説明していきます。
1.サクラエディタのgrep結果
2.tabを除去
3.パスと行数列数を分割
4.行数列数とエンコードを分割
5.エンコードと検索行を分割
6.もうちょっと分割
1.サクラエディタのgrep結果
サクラエディタのgrep結果は、下記のフォーマットで出力されます。
①ファイルパス … パス
②検索文字列のファイル上の検出行数と列数 … 行数列数
③検出ファイルのエンコーディング … エンコード
④検索文字列の検出行 … 検出行
この4つの正規表現を使って、
Excelにイイ感じに貼り付けられるよう、編集(tab区切り)します。
ということで、最初に11行目から35行目を抜き出しておきましょう。
2.tabを除去
\t
「パス」「行数列数」「エンコード」「検出行」を
tab区切りとして編集する前に、「検出行」に含まれているかもしれない
tabを除去しておきます。
ここで登場するのが、\tです。
\tはtabを表します。
似た表現に
\r\n : 改行(Windows系)
\n : 改行(Unix系)
などがあります。
今回は、tabを半角スペース4文字に置換しておきます。
ちなみに、”\t”という文字列を探したい場合は、\\tと書きます。
3.パスと行数列数を分割
\ . (
それでは、tabで区切っていきましょう。
今、
パスの末尾は.html
行数列数の先頭は(です。
ということで
.html(を.html\t ←(は要らないので、除去します!
とすれば良いのですが…これでは上手くいきません。
正規表現で
.は任意の1文字
(は)で囲んでパターンを表す文字列
を表します。
このように、意味を持つ文字をメタ文字呼びます。
他には
* : 直前の文字列が0個以上続く
+ : 直前の文字列が1個以上続く
[] : 囲んだ文字のいずれか1文字を表す
^ : 行頭 []の中では「以外」を表す
$ : 行末
などがあります(他にもあります)。
そして、
ここでは.と(をそのままの文字(ピリオドと括弧)として扱いたいので、
\を使います。
\をメタ文字の前に書けば、メタ文字をそのままの文字として扱えます。
ということで
\.html\(を\.html\tに置換しましょう。
4.行数列数とエンコードを分割
\ ) [
行数列数とエンコードの間は
) [ ←)[の間に半角スペース2文字
ということで、先ほどのメタ文字のことを踏まえると
\) \[
を
\t
に置換。
5.エンコードと検索行を分割
\ ] +
エンコードと検索行の間は
]: ←:の後に、半角スペース1文字以上が含まれる
:の後の個数が決まっていない、連続する半角スペースを、除去しましょう。
\]: +
を
\t
に置換。
+:直前の文字列が1個以上続く
これで、「パス」「行数列数」「エンコード」「検出行」
をtabで分割できました。
Excelに、ペタっと貼り付けましょう。
ちなみに、置換する際は置換した数を確認しておきましょう。
想定外の置換をしていないことを、確認するためです。
6.もうちょっと分割
\ [^] ^ + $ \t
先の章で「パス」「行数列数」「エンコード」「検出行」を
tabで分割できましたが、できれば…パスは「フォルダ」と「ファイル」
行数列数は「行数」と「列数」に分けたいです。
しかし、1回で上手く分割する方法がわかりません…
しかし、Excelに貼り付けた「パス」と「行数列数」を
それぞれ抜き出した後であれば、分割できます。
パス
①「パス」をサクラエディタに貼り付け
②\\[^\\]+$を除去 → フォルダ抽出 → Excelへ
③「パス」をサクラエディタに再度貼り付け
④^.+\\を除去 → ファイル抽出 → Excelへ
[^\\]+ : ”\”以外の文字列が1文字以上続く
行数列数
①「行数列数」をサクラエディタに貼り付け
②,を\tに置換 → Excelへ
以上、
パパパっと書いたので、わかりにくい点等あるかもしれませんが、
正規表現を知っている/知らないでは
仕事の効率がすごく変わる(ときもある)と思いますので
皆さんも覚えてみましょう!
最後までお読みいただき、ありがとうございます。