ローカルに保存したhtmlファイルをバッチ処理する方法

ローカルに保存したhtmlファイルに、sedで変更を加えて加工するバッチファイルの作成

目次
0、はじめに
1、基本的な処理の考え方
2、修正用バッチプログラム
3、変換処理用サンプル html tag で定義されてる事が前提
4、終わりに


0、はじめに

htmlファイル内の、スタイルシートや、Javascript のタグ部を削除や修正する為の方法を知っておくとなにかと便利。
Windows環境で、sedコマンド(Linux版)をバッチファイル化してデータを再利用する手順の確認


1、基本的な処理の考え方

Linux版のsedコマンドがWindows環境で利用できるようになっていることが前提。
windows sub system for linux や、Cygwin, mingw-w64 などを設定して、GNU software の sed を用意する。
この sed コマンドは、文章の終端文字を、改行(0x0a)からファイルの終端(0x00)に変更ができるので、
タグの途中に改行コードが含まれても正しく処理できる。
問題点は、sed コマンドが最大一致を行うことで、複数のタグブロックがあると途中の全てが削除・修正されて
期待する結果が得られないことで、"特定文字が含まれない間"という正規表現と組み合わせて使うことになる。

簡単に言えば、 GNU sed で -z オプション付きでかつ、特定文字を「含まない」という否定の正規表現を併用して
修正作業を行うと言う事です。

Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  -n, --quiet, --silent
                 suppress automatic printing of pattern space
      --debug
                 annotate program execution
  -e script, --expression=script
                 add the script to the commands to be executed
  -f script-file, --file=script-file
                 add the contents of script-file to the commands to be executed
  --follow-symlinks
                 follow symlinks when processing in place
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
  -b, --binary
                 open files in binary mode (CR+LFs are not processed specially)
  -l N, --line-length=N
                 specify the desired line-wrap length for the `l' command
  --posix
                 disable all GNU extensions.
  -E, -r, --regexp-extended
                 use extended regular expressions in the script
                 (for portability use POSIX -E).
  -s, --separate
                 consider files as separate rather than as a single,
                 continuous long stream.
      --sandbox
                 operate in sandbox mode (disable e/r/w commands).
  -u, --unbuffered
                 load minimal amounts of data from the input files and flush
                 the output buffers more often
  -z, --null-data
                 separate lines by NUL characters
      --help     display this help and exit
      --version  output version information and exit

If no -e, --expression, -f, or --file option is given, then the first
non-option argument is taken as the sed script to interpret.  All
remaining arguments are names of input files; if no input files are
specified, then the standard input is read.

GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software: <https://www.gnu.org/gethelp/>.


2、修正用バッチプログラム

  htmlファイル修正 BATサンプル
@echo off
@echo off
IF @%1@ == @@ GOTO USAGE
IF NOT EXIST %1 GOTO NOT_EXIST
SET OUTPUT_NAME="%~n1.fixed%~x1"
SET OUT_PUT_NAME=temp_file

@echo on
copy /Y "%~1" %OUT_PUT_NAME%

REM ## 特定タグ部の削除処理 ##
REM   テキスト文字では使われない特殊コード(\a:0x07)を該当タグの最後に埋め込む
REM 
REM   特殊文字(\a:0x07)を含まない文字列で最後が終端タグである文字列を処置対象指定
REM   ここでは、削除する処理のため置換文字を、無しとして指定している
REM   埋め込んだ特殊文字(\a)も同時に削除する
REM 
sed -z -i -e "s/<\/script>/<\/script>\a/gi"                       %OUT_PUT_NAME%
sed -z -i -e "s/<script[ |\r|\n|\t|>][^\a]*<\/script>\a//gi"      %OUT_PUT_NAME%

sed -z -i -e "s/<\/style>/<\/style>\a/gi"                         %OUT_PUT_NAME%
sed -z -i -e "s/<style[ |\r|\n|\t|>][^\a]*<\/style>\a//gi"        %OUT_PUT_NAME%

move /Y %OUT_PUT_NAME% %OUTPUT_NAME%

@echo off
GOTO :eof

:USAGE
@echo;
@echo;
echo USAGE: %~n0%~x0  処理対象_htmlファイル
@echo;
PAUSE
GOTO :eof

:NOT_EXIST
@echo;
@echo;
echo 処理対象のファイル "%1" は存在しません。
@echo;
PAUSE
GOTO :eof
////////////////////////////////////////////////////////////////////////////////////
//// 使用にあたっての前提条件として、windows 環境では GUN の sed が使える事
//// 行単位の処理を行わず、ファイル全体を1行と見なす(終端文字は\nでは無く0)
//// この動作検証環境には、sed (GNU sed) 4.9 がインストールされている
////
c:\>sed --version 
sed (GNU sed) 4.9 
Packaged by Cygwin (4.9-1)
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later<https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Fenlason, Tom Lord, Ken Pizzini,
Paolo Bonzini, Jim Meyering, and Assaf Gordon.

This sed program was built without SELinux support.

GNU sed home page: <https://www.gnu.org/software/sed/>.
General help using GNU software:<https://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.


3、変換処理用サンプル

 html上のボタンクリックで、ページに記載されているサンプルの部分をクリップボードに送る仕組み。
 html:sample

4、終わりに

どんなことにも言えるが、知っていれば簡単な事でも、知らなければ解決出来ないか時間がかかってしまう。
出来てもスマートではないとか。 知っていることは有限で、知らないことは無限。