【BAT】sedっぽいことをするBATファイル
sedっぽいことをするBATファイルを作ってみました。見ての通り、がんばってない感じのシンプルな作りとなっていますが、自分の用途ではだいたいこれで間に合ってます。[sed.bat]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@if (1==1) /* | |
@echo off | |
if "%~1"=="" goto :USAGE | |
if "%~1"=="/?" goto :USAGE | |
rem ******************************************************************************** | |
:MAIN | |
CScript //nologo //E:JScript "%~f0" %* | |
If ERRORLEVEL 1 goto :USAGE | |
goto :eof | |
rem ******************************************************************************** | |
:USAGE | |
echo USAGE: | |
echo %~n0 正規表現 | |
echo 標準入力を正規表現で置換し、標準出力へ出力します。 | |
echo 内部処理には、JScriptの「replace」メソッドを使用していますので、 | |
echo 細かい仕様はそちらに依存します。 | |
echo. | |
echo ※改行コードはCRLFとして読み込み・出力します。 | |
echo. | |
echo 【引数】 | |
echo 正規表現 | |
echo 例)s/string/dist/g | |
goto :eof | |
rem ******************************************************************************** | |
rem */ | |
@end | |
//---------------------------------------------------------- | |
if (WScript.Arguments.Lrngth == 0) | |
WScript.Quit(9); | |
var re = WScript.Arguments(0).split("/"); | |
var objRe = new RegExp(re[1], re[3]); | |
while (!WScript.StdIn.AtEndOfStream){ | |
var line = WScript.StdIn.ReadLine() + "\r\n"; | |
WScript.StdOut.Write(line.replace(objRe, re[2])); | |
} | |
WScript.Quit(0); |
使用例
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
call %LOCAL%\batlib\bin\batrc.bat | |
set OUT1="%~dpn0_out1.txt" | |
set OUT2="%~dpn0_out2.txt" | |
if exist "%OUT1%" del "%OUT1%" | |
if exist "%OUT2%" del "%OUT2%" | |
call nearDoc "%~0" "HERE" ^ | |
| findstr /v "^\*" ^ | |
| findstr /v "^;" ^ | |
| findstr /v "^@[^@]" ^ | |
| call sed "s/\r\n//g" ^ | |
| call sed "s/(\[pm\]|\[lr\]|\[r\])/\r\n/g" ^ | |
| call sed "s/\\r\\n\\r\\n(\\r\\n)+/\r\n\r\n/g" ^ | |
| call sed "s/\[.+?\]//g" ^ | |
| gawk "gsub(/\\r\\n/,\"\n\",$0) || 1" > "%OUT1%" | |
call nearDoc "%~0" "出力イメージ" > "%OUT2%" | |
fc /n "%OUT1%" "%OUT2%" | |
echo ERRORLEVEL:%ERRORLEVEL% | |
if not errorlevel 1 del "%OUT1%" "%OUT2%" | |
pause | |
exit /b | |
HERE> | |
*FC908B62_CB98_4E6E_890A_D77751AD9FE6| | |
[cm] | |
『どうだ、無線機を届けてやるから、土日にでも温泉に行かないか? もちろん俺が全費用だすぜ』[lr] | |
[r] | |
[r] | |
「はあ、土日には予定が……」[lr] | |
[r] | |
ゲンさんはとてもいい人である。親身になっていろいろと相談も乗ってくれる。[r] | |
だが、その誘いには決して乗ってはいけない。[lr] | |
なぜなら、ゲンさんは……、[pm] | |
*E8EB4063_7AAB_4FA8_BA58_1D8DC2E0DA76| | |
[cm] | |
男性が好きな親父さんなのだ。[lr] | |
[r] | |
ゲンさん曰く、[r] | |
「俺ぐらいのベテランになると、声だけで大体の性格と体型がわかるんだぜ。俺の勘では直哉は俺好みに間違いねえ。今まではずしたことないんだぜ」[r] | |
と……。[pm] | |
<HERE | |
出力イメージ> | |
『どうだ、無線機を届けてやるから、土日にでも温泉に行かないか? もちろん俺が全費用だすぜ』 | |
「はあ、土日には予定が……」 | |
ゲンさんはとてもいい人である。親身になっていろいろと相談も乗ってくれる。 | |
だが、その誘いには決して乗ってはいけない。 | |
なぜなら、ゲンさんは……、 | |
男性が好きな親父さんなのだ。 | |
ゲンさん曰く、 | |
「俺ぐらいのベテランになると、声だけで大体の性格と体型がわかるんだぜ。俺の勘では直哉は俺好みに間違いねえ。今まではずしたことないんだぜ」 | |
と……。 | |
<出力イメージ |
右側に「\r\n」を入れても文字扱いになってしまって改行に置換できない問題が致命的ではある。