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

主に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

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

関連記事

postgresqlでの拡張のインストール

PostgreSQL10で暗号化関数を使用するため拡張(pgcrypto)をインストールした際の出来事を記載します。 事象 pgcryptoの拡張をインストールしたり、インストールの確認を行うと、その …

Wildfly11のインストール

このサイトでWebアプリを公開したい。 仕事ではJBoss Enterprise Application Server(JBoss EAP)を使う機会が多いのでそれを使いたいがライセンス料がかかる。無 …

疎通確認用pingツール

新人君たちと本番環境の構築作業でデータセンターに入り。 構築したサーバから、既存の重要なサーバへの疎通確認を行うために、pingを何度も入力する予定とのこと。 作業時間の短縮や間違いの低減のために、こ …

wildflyアップロードサイズ上限

多くのWebサーバやAPサーバでは、サーバリソースの過剰な消費やDoS攻撃に対する対処として、アップロードの最大サイズが決められている。(厳密には、ブラウザから入力値やファイル等のデータを送信するため …

Javaでのパスワード付きzipファイルの圧縮/解凍方法(ZipCrypto/AES)

先日、JavaでのZIP暗号化の考察という記事を書きましたが、zip4jのメンテナンスが再開されており、バージョン2系が公開されていましたので、これを使って通常のzip圧縮/解凍、パスワード付きzip …

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