LoginSignup
0
0

More than 1 year has passed since last update.

Gnu global(gtags) を使ってソース一式を連続Grepする

Last updated at Posted at 2022-06-10

組込みソフト等,中規模/大規模ソフトを作成ていると他者が作ったソースに自分が変更しようとする RAM が使われており,その下流影響確認を入念に行うことが求められる。

秀丸等で 1 つづず手動で Grep 検索を行うと時間がかかってしまうため,一括で検索する Bat ファイルを書いてみました。

前提

  • Gnu global がインストールされていること
    GnuGlobakをダウンロードしローカルドライブに展開ください。

  • GTAGS,GRTAGS ファイル等を作成する
    検索したいソース一式が入っているフォルダで DOS コマンドラインを開き,gtags.exe を実行する。

  • LISTFILE.txt を作成する
    検索したい RAM 名を 1 行 1 つで記載してください

LISTFILE.txt
ram1
ram2
ram3
ram4

実行方法

  • 手段1 LISTFILE.txt を作成手ある場合は, bat ファイルをダブルクリックで実行

  • 手段2 listfile を bat ファイルにドラック&ドロップし実行

Bat ファイル

gtagsgrepbytext.bat
@echo off
@REM file指定の連続Grep検索 2022/01/01 sby

@REM - Gnu HPからソフトをダウンロード
@REM   Gnu Global https://www.gnu.org/software/global/
@REM   Gnu Global(gtags.exe/htags.exe)を展開したフォルダをPathに追加する。
set path=C:\TOOLS\gtags\bin;%PATH%

setlocal enabledelayedexpansion
REM パラメータを設定する
if "%1"=="" (
    @REM 引数を持たず実行された場合は初期設定で処理を続ける
    SET LISTFILE=LISTFILE.txt
    set OUTFOLDER=output_LISTFILE
) else (
    SET LISTFILE=%1
    set OUTFOLDER=output_%~n1
)

REM 出力フォルダを作成する
if not exist %OUTFOLDER% mkdir %OUTFOLDER%

REM ファイルのLine数をカウント
set linecnt=0
for /F "tokens=1" %%A in ( %LISTFILE% ) do (
    set /a linecnt=linecnt+1
)

REM 1 RAMごとに1ファイルで出力
set num=0
for /F "tokens=1" %%A in ( %LISTFILE% ) do (
    set /a num=num+1
    if not exist %OUTFOLDER%/%%A.txt (
        ECHO Global::[ !num! / !linecnt! ] %%A を処理中です
        global --grep %%A --result=grep > %OUTFOLDER%\%%A.txt
    ) else (
        ECHO Global::[ !num! / !linecnt! ] %%A は処理済み。処理をPassします。
    )
)
endlocal
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0