アプリ開発ときどきアウトドア

主にJavaを使ったアプリ開発やトラブルシューティング等のノウハウ、キャンプや登山の紹介や体験談など。

1. システムエンジニアリング bat_vbs windows 実装技術

テキストファイルマスクツール

投稿日:2018年11月25日 更新日:


本番環境での性能検証でNGになってしまった。
どの処理でどれほどの処理時間がかかっているかを把握するためにログレベルを変更して、ログを取得した。
対応方法を自社の担当者と検討するために、本番環境からこのログを持ち帰りたいが、本番メールアドレスがログに記録されている。
数千件のメールアドレスを手動でマスクするのは現実的ではないので、ツールを作ることにした。
(どちらかというと、ツールというよりはサンプルです。)

ツールを実行するためのバッチファイルです。
WScript.Echoを使っているので、ダブルクリックで実行すると大量のメッセージボックスが表示されてしまう。
これを回避するためラッパーであり、実際の処理は次のvbsファイルです。

@echo off
rem 
rem mask_text.bat: テキストファイルの内容をマスクする
rem 
cscript.exe /nologo mask_text.vbs
pause

入力ファイルをオープンし、読取行のメールアドレスを置換して出力ファイルに出力します。
何らかの変更があった場合は、変更前/後を標準出力に出力します。

'
' mask_text.vbs: テキストファイルの内容をマスクする
'
' 実行方法: cscript.exe /nologo mask_text.vbs
'
Option Explicit

'入出力ファイル ==========
'マスク対象のファイルを定義してください。
Const INPUT_FILE="test.txt"
'マスクした内容を出力するファイルを定義してください。
Const OUTPUT_FILE="test_masked.txt"

'処理用定数 ==========
Const ForReading = 1

'マスク用の正規表現の定義 ==========
'メールアドレス的なワード(一般的なメールアドレスチェック用のものではない)
Dim oReMailAddr
Set oReMailAddr = CreateRegExp( _
    "\b[A-Z0-9._%+-]+@[A-Z0-9.-]+[A-Z]{2,4}\b", True, True)
'必要であれば以降に追加(下記は追加例)
'Dim oReTest
'Set oReTest = CreateRegExp("regexp", True, True)

WScript.echo "start"

'入力ファイルの内容を置換して出力 ==========
Dim oFSO, oInStream, oOutStream
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oInStream = oFSO.OpenTextFile(INPUT_FILE, ForReading)
Set oOutStream = oFSO.CreateTextFile(OUTPUT_FILE, True)
Dim sLine, sRepLine
Do Until oInStream.AtEndOfStream

    '行読取
    sLine = oInStream.ReadLine

    '置換
    sRepLine = oReMailAddr.Replace(sLine, "***@***")
    'sRepLine = oReTest.Replace(sLine, "***")

    'デバッグ
    If sLine <> sRepLine Then
        WScript.Echo "< " & sLine
        WScript.Echo "> " & sRepLine
        WScript.Echo "---"
    End If

    '出力
    oOutStream.WriteLine sRepLine
Loop
oInStream.Close
oOutStream.Close

WScript.echo "end"

'マスク用の正規表現オブジェクトを生成する。
Function CreateRegExp(sExp, bGlobal, bIgnoreCase)
    Set CreateRegExp = CreateObject("VBScript.RegExp")
    With CreateRegExp
        .Pattern = sExp
        .Global = bGlobal
        .IgnoreCase = bIgnoreCase
    End With
End Function

ダウンロードは下記から。



(adsbygoogle = window.adsbygoogle || []).push({});


(adsbygoogle = window.adsbygoogle || []).push({});

-1. システムエンジニアリング, bat_vbs, windows, 実装技術

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Webアプリ用のサイトマップ生成

Googleの検索結果への表示を促進するためにGoogleに対してサイトマップを提供する必要がある。 WordPressでは様々なプラグインを使ってサイトマップを作成できるが、Webアプリの場合は独自 …

Windows Updateが終わらない問題

ふと会社で使っているPCのWindows Updateがほとんど当たっていないことに気づいた。 手動でWindows Updateを実行すると、30分、1時間たっても終わらない… これは何 …

Javaでサポートする暗号化アルゴリズム

Java暗号化アーキテクチャ Javaで暗号化処理を実装する場合、Java暗号化アーキテクチャ(Java Cryptography Architecture: JCA)と呼ばれるフレームワークを使いま …

SLF4Jの仕組みと使用方法

何気に使用しているSLF4Jの仕様やその仕組みを整理したいと思います。 前提 元ネタは次のSLF4J Manualサイトです。 www.slf4j.org  1 share 1&n …

CentOS7のマルチホーム化

サイトの存在を隠しつつも、sftpサーバを公開し、後輩と1G以上のファイルのやりとりしたい。 パブリック側のIPアドレスを教えてしまうと、どこのサーバだろうかとブラウザで開いたりするとサイトの存在がわ …

プロフィール ゆっきーです。
都内でシステムエンジニアをやっています。
もっと詳細を見る