カスタムhtmlに変換したいcxommaで区切られたcsvがあり、それを実行する別のスクリプトに遭遇しましたが、使用してから問題になっています https://www.tutorialspoint .com/execute_bash_online.php 実行します。
私が見つけたスクリプトは次のとおりです: https://unix.stackexchange.com/questions/105501/convert-csv-to-html-table
私の問題は、私の出力が少し異なる必要があるということです、そしてECHOについての何かが本当に戦いを繰り広げています。だからここに私のリストの例があります:
Product、100 usdこのスクリプトを使用して、次のように変換します。Product100米ドル
基本的にリストを2つのセルに分割します。しかし、echoは "を削除し続けるので、それはただの混乱です。bashエミュレーターが行を折り返すためかどうかはわかりませんが、エラーが発生し続けます。> <およびtrとtdがコマンドであると想定しているようです。 。
現在、私のスクリプトは次のようになっています。これは、エコーにどれだけ苦労したかを反映しています。
while read INPUT ; do
echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';"";
echo ""onmouseout="this.style.backgroundColor='#d4e3e5';>";
echo ""<td>${INPUT//,/</td><td><b>}</b></td></tr>";""
done
そしてそれは生成します:
$bash -f main.sh
main.sh: line 2: tr: No such file or directory
main.sh: line 4: ;
echo <td>six</td><td><b>nine</td><td><b>twelve</b></td></tr>: No such file or directory
main.sh: line 4: : command not found
私はエコーで狂ったように実験しました、しかし今私は私の機知に富んでいます。ありとあらゆる助けが大いにそして感謝して受け入れられました。
引用符が間違っています。具体的には、二重二重引用符です。
あなたが持っているものを分解してみましょう、ビットは一緒に連結されています
echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';"";
""
<tr
-これは「ファイルが見つかりません」エラーの原因ですonmouseover="this.style.backgroundColor='#ffff66';"
エコーコマンドを修正するには:
while read INPUT ; do
echo "<tr onmouseover=\"this.style.backgroundColor='#ffff66'\""
echo "onmouseout="this.style.backgroundColor='#d4e3e5'>"
echo "<td>${INPUT//,/<\/td><td><b>}</b></td></tr>"
done
一重引用符と二重引用符が混在している場合、ヒアドキュメントは非常に読みやすくなります。また、read
コマンドを使用してCSV行を区切ります。
while IFS=, read -r first second ; do
cat <<END_HTML
<tr onmouseover="this.style.backgroundColor='#ffff66'" onmouseout="this.style.backgroundColor='#d4e3e5'">
<td>$first</td><td><b>$second</b></td>
</tr>
END_HTML
done
おそらくエコーで間違ったツリーを吠えていると思います。おそらくsed、awk、Perlなどの方が良い解決策かもしれませんが、エコー文字列を機能させるには、印刷したい二重引用符とドル記号をエスケープできます。 、 お気に入り:
#Added \ \ \
$ echo "\"<tr onmouseover=\"this.style.backgroundColor='#ffff66';\"";
"<tr onmouseover="this.style.backgroundColor='#ffff66';"
$ echo "\"onmouseout=\"this.style.backgroundColor='#d4e3e5';>"
"onmouseout="this.style.backgroundColor='#d4e3e5';>
$ echo "\"<td>\${INPUT//,/</td><td><b>}</b></td></tr>\";\""
"<td>${INPUT//,/</td><td><b>}</b></td></tr>";"
man bash
にはさらに多くの情報があります。見積もりのセクションを参照し、次のようなことに注意してください。
メタ文字
引用符で囲まれていない場合に単語を区切る文字。次のいずれか:| & ; ( ) < > space tab newline
制御オペレーター
制御機能を実行するトークン。これは、次の記号の1つです。|| & && ; ;; ;& ;;& ( ) | |& <newline>
だから私は何年もの間Shellでスクリプトを作成しておらず、何年も使用していませんでした..しかし、私はあなたが提示した後者のソリューションを試しました。 shtest2.shそれは空白だけを返します。
最初の解決策を試すと、次のようになります。〜 $ cat price.csv | sh test2.sh test2.sh:4:test2.sh:構文エラー:予期しないリダイレクト
だから、私がソリューション#2を間違って使用しているかどうかわからない、そしてソリューション#1がまだそれをしている理由がわからないのですか?