コマンドの結果を取得して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