forループの結果をhtmlファイルに挿入する - BASH

forループの結果をhtmlファイルに挿入する - BASH

コマンドの結果を取得してHTMLコードに保存するスクリプトがあります。

私が今まで持っているのは次のとおりです...

#!/bin/bash

list_dir=`ls -t downloads/`

for i in $list_dir
do
#----  
#       echo "<a href=\"downloads/$i\">$i</a>"
#----attempt 1   
#    
  ` sed -n 'H;${x;s/placeholder .*\n/<a href="downloads/$i">$i</a>\
                       &/;p;}' index.html`
done

「プレースホルダ」とマークされたhtmlファイルの内容を置き換えるためにforループの結果を取得しようとしています。プレースホルダーなしで特定のポイントの下にコンテンツを挿入するだけです。私は何をすべきかわからない。

ベストアンサー1

パラメータ置換を使用すると、エスケープを問題なくテキストを置き換えることができます。

output=$(ls -t downloads | while IFS= read -r f; do
    echo "<a href=\"downloads/$f\">$f</a>"
done)

html=$(<index.html)
html=${html/placeholder/$output}
echo "$html" > output.html

awk -v以下を使用して代替テキストを変数として渡すこともできます。

awk -v v="$output" '{sub("placeholder",v);print}' index.html > output.html

または、プレースホルダーなしで複数行のパターンを置き換えるには、Rubyを使用してください。

echo "$output" | ruby -i -e 'print gets(nil).sub(/<a .*<\/a>\n/m, STDIN.read)' index.html

おすすめ記事