2

У меня есть csvma, разделенный cxomma, который я хочу превратить в пользовательский html, и я столкнулся с другим скриптом, который это сделал, но для меня это было не что иное, как проблемы, так как я использую https://www.tutorialspoint.com/execute_bash_online .php, чтобы запустить его.

Вот скрипт, который я нашел: https://unix.stackexchange.com/questions/105501/convert-csv-to-html-table

Моя проблема в том, что мой результат должен быть немного другим, и что-то в ECHO действительно помогает. Итак, вот пример моего списка:

Product, 100 usd Теперь, используя этот скрипт, я хочу преобразовать его в: Product 100 usd

В основном разделение списка на 2 ячейки. Но эхо продолжает исчезать ", так что это просто беспорядок. Я не знаю, связано ли это с тем, что эмулятор bash переносит строки, но я продолжаю получать сообщения об ошибках, где кажется, что> <и tr, а td - это команда.

В настоящее время мой сценарий выглядит следующим образом, и он отражает, насколько сильно я столкнулся с echo ..:

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 

Я экспериментировал как сумасшедший с эхом, но теперь я нахожусь в конце. Любая и вся помощь очень и с благодарностью принята.

3 ответа3

7

Ваше цитирование неверно, в частности двойные двойные кавычки.

Давайте разберем, что у вас есть, биты соединены вместе

echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';"";
  1. команда эха
  2. пустая строка ""
  3. перенаправление <tr - вот откуда возникает ошибка "файл не найден"
  4. пространство
  5. строка onmouseover="this.style.backgroundColor='#ffff66';"
  6. открытая кавычка и точка с запятой, первый символ следующей строки

Чтобы исправить ваши эхо-команды:

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

Когда у вас есть смесь одинарных и двойных кавычек, heredoc очень читабелен. Кроме того, используйте команду 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
2

Я думаю, что вы, вероятно, лаете неправильное дерево с помощью echo, возможно, 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

управляющий оператор
Токен, выполняющий функцию управления. Это один из следующих символов:

|| & && ; ;; ;& ;;& ( ) | |& <newline>
0

Так что я не писал сценарии в оболочке целую вечность, тем более использовал это годами .. Но я попробовал последнее решение, которое вы представили, и когда я это сделал: cat Prices.csv | sh test2.sh ничего не возвращает, кроме пробелов.

Когда я пробую первое решение, я получаю: ~ $ cat Prices.csv | sh test2.sh test2.sh: 4: test2.sh: Синтаксическая ошибка: неожиданное перенаправление

Так что не уверен, что я использую решение № 2 неправильно, и не знаю, почему решение № 1 делает это до сих пор?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .