##やりたいこと
ローカルにあるHTMLファイルの中に記述されているインクルード記述部分を
jspファイル用の記述に置換しようとしています。
このときファイル内にはいくつかインクルード記述があるため一括で置換をかけようとしていますが
インクルード先に指定しているURLはバラバラなため正規表現でURLを指定しています。
また、この処理はループ処理で
A.htmlを置換→B.htmlを置換→C.htmlを置換
と処理しておりファイル数も可変です。
whileでファイルの中身を1行ずつ処理することも検討しましたが、
ファイル数が膨大なため一括置換が理想です。
▼HTML内にある探したい文字列
html
1<!--#include virtual="/testA/text.txt" --> 2<!--#include virtual="../testA/testB/index.html" --> 3<!--#include virtual="../../testA/testB/testC/index.txt" -->
▼正規表現で検索
txt
1<!--#include virtual="((/|../)[-_..!a-zA-Z0-9/]+)" -->
エディタ上で、上記の記述で検索をかければきちんと探したい文字列とマッチします。
▼実際に書いたシェル
bash
1sed -i -e 's?<!--#include virtual="((/|../)[-_..!a-zA-Z0-9/]+)" -->?<a href="((/|../)[-_..!a-zA-Z0-9/]+)"></a>?g' index.html
##発生している問題
sedを使用してファイル内のマッチするエリアを一括置換かけようとしましたが、なぜか実際に書いたシェルでは動きませんでした。
文法ミスを疑って、いったん正規表現なしで直接指定して試してみたところきちんと置換されました。
↓以下で試したらきちんと動きました。
bash
1sed -i -e 's?<!--#include virtual="/testA/text.txt" -->?<jsp:include page="/testA/text.txt" flush="true" />?g' index.html
なぜこれが動かないのか理由がわからないためご教示いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/22 04:06