Использование bash для экспорта списка через запятую в html

518
Aryat Mapreh

У меня есть 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 ячейки. Но echo продолжает выводить ", так что это просто беспорядок. Я не знаю, потому ли это, что эмулятор bash переносит строки, но я продолжаю получать ошибки, которые, как кажется, предполагают> <и tr, а td - это команда ,

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

while read INPUT ; do echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';""; echo ""onmouseout="this.style.backgroundColor='#d4e3e5';>"; echo ""<td>$</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  

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

2

3 ответа на вопрос

7
glenn jackman

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

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

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>$</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 
`echo` не читает из stdin, поэтому heredoc здесь не пригодится. Возможно, вы хотели использовать `cat` в последнем фрагменте? jwodder 5 лет назад 2
О, конечно. Спасибо за исправление glenn jackman 5 лет назад 0
2
Xen2050

Я думаю, что вы, вероятно, лаете неправильное дерево с помощью 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>\$</b></td></tr>\";\"" "<td>$</b></td></tr>";" 

man bash имеет гораздо больше информации, смотрите раздел «Цитирование» и следите за вещами, такими как:

метасимвол Символ,
который без кавычек разделяет слова. Одно из следующего:

| & ; ( ) < > space tab newline 

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

|| & && ; ;; ;& ;;& ( ) | |& <newline> 
Хорошо, давайте забудем эхо .. что я смотрю на что-нибудь более удобное, например, sed, awk или perl? Aryat Mapreh 5 лет назад 0
0
Aryat Mapreh

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

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

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

Файлы, которые я использую, - это текстовые файлы, разделенные запятыми, а не csv, забыл это. Aryat Mapreh 5 лет назад 0