slimやjadeのようなテンプレートエンジンを使うとHTMLの一部を置き換えしたりできます。
シェルスクリプトでコレを実現する場合、私はいままでgrepだのsedだのawkだのをブンまわしていました。
さて、ここで昔から使われいるテキスト処理ツールのm4が登場します。
やってる事はテキストのルールベースの置き換えなので、sedの強化版とでもいうべきか……。
パイプ処理ならSlimやJadeでも可能ですが、タグベース以外にも普通のテキストファイルの編集も可能。
実際のところ
環境構築
WSLは素の環境でGNU版が入っていました。
$ m4 --version m4 (GNU M4) 1.4.18 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://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 Rene' Seindal.
どういう訳かない場合も標準的環境ならば以下で導入ができるかと。
$ sudo apt upgrade $ sudo apt install m4
使い方
文字列に応じた操作
マッチした値は"$0"のような感じで格納される
$ echo "Hello, World" | m4 -D Hello="len($0)" 5, World
合わせ技で。
マッチは大文字小文字の判定あり。
$ echo "Hello, hello, Hello" | m4 -D Hello="len($0)" 5, hello, 5
シェルコマンドの実行
目的であるテンプレートエンジン的な使いかた
引数にファイル名をとり、独自コマンドをパイプで渡して、それをcatでキャッチして実行というながれ
$ function HELLOWORLD () { echo -n 1234; } $ cat basetext.txt Hello, World
$ HELLOWORLD | m4 -D Hello="syscmd(cat)" basetext.txt 1234, World