2017-01-06 10 views
-1

複数の(> 200)HTMLファイルにテキストブロックを挿入する必要があります。私はbashを使って割り当てを扱うことに決めました。シンボルを含む変数で1行を置換する最も良い方法

挿入しなければならないのTextBlockはmultilinerです:

textblockvar=' 
<body class="article toc2 toc-right"> 
<div id="readspeaker-button1" class="rs_skip rsbtn rs_preserve"> 
<a rel="nofollow" class="rsbtn_play" accesskey="L" title="Read 
out with ReadSpeaker" href="//app-eu.readspeaker.com/cgi-bin 
/rsent?customerid=5&lang=nl_nl&amp;voice=Ilse&re$ 
<span class="rsbtn_left rsimg rspart"><span 
class="rsbtn_text"><span>Lees voor</span></span></span> 
<span class="rsbtn_right rsimg rsplay rspart"></span> 
</a> 
</div> 
' 

textblockvarがすべて200個の以上のhtmlファイルで一貫しているようだ<body class="article toc2 toc-right">タグを、置き換えられます。

私は、置換を実行するための様々な技術を試してみました:

FILES=leerstof/*/*.html 
for f in $FILES 
do 

sed -e "s|'<body class="article toc2 toc-right"'|${textblockvar}|g" $f 

done 

しかし、スクリプトは常に致命的なエラーで終わる:「終端されていない `s'はコマンド」。

引用符を入れずに試してみましたが、それでもエラーは解決しません。

おそらく、私の解決策は最良の選択肢ではありません。利用可能な回避策はありますか?ここ

+3

正規表現でHTMLを解析しないでください! –

+2

この割り当てをbashで行うのか、sedやawkのような外部のスクリプトツールを使っているのでしょうか? (また、[正規表現でHTMLを解析しないでください](http://stackoverflow.com/a/1732454/1072112)、男が言ったように) – ghoti

+0

@ghoti私はこのタスクにbashスクリプトを使用します。このスクリプトでは、sedをhtmlに置き換えて使用しています – kzpm

答えて

0

はうまくいくかもしれない方法です。

  1. はない"'であなたのsedコマンドを引用します。
  2. 文字列変数の改行を\nに置き換えます。
  3. 置換文字列にアンパサンドをエスケープしてください(例:...id=5\&lang=nl_nl\&amp;voice=Ilse\&re...
  4. sed -iを使用すると、ファイルを変更できます。

例えば、

textblockvar='<body class="article toc2 toc-right">\n<div id...' 
... 
sed -i 's|<body class="article toc2 toc-right"|'$textblockvar'|g' $f 

注:意図した通りに動作するかどうか、それはやるとチェックなるかだけを出力する-i最初せずにそれをテスト。その場合は、-iを使用して実際にファイルを変更してください。

関連する問題