Извините, что воскресил древнюю ветку, но недавно я хотел это сделать, но я хотел, чтобы это сделал 100% переносимый скрипт bash. Итак, вот мое решение с использованием только grep и sed.
Нижеследующее было очень быстро обработано, поэтому его можно сделать более элегантным, но я только начинаю с sed / awk и т. Д. *
curl "http://www.webpagewithtableinit.com/" 2>/dev/null | grep -i -e '</\?TABLE\|</\?TD\|</\?TR\|</\?TH' | sed 's/^[\ \t]*//g' | tr -d '\n' | sed 's/<\/TR[^>]*>/\n/Ig' | sed 's/<\/\?\(TABLE\|TR\)[^>]*>//Ig' | sed 's/^<T[DH][^>]*>\|<\/\?T[DH][^>]*>$//Ig' | sed 's/<\/T[DH][^>]*><T[DH][^>]*>/,/Ig'
Как вы можете видеть, у меня есть источник страницы, использующий curl, но вы можете с такой же легкостью использовать источник таблицы из других источников.
Вот объяснение:
Получить содержимое URL с помощью cURL, сбросить stderr в ноль (без индикатора выполнения)
curl "http://www.webpagewithtableinit.com/" 2>/dev/null
.
Мне нужны только элементы таблицы (возвращаются только строки с тегами TABLE, TR, TH, TD)
| grep -i -e '</\?TABLE\|</\?TD\|</\?TR\|</\?TH'
.
Удалите все пробелы в начале строки.
| sed 's/^[\ \t]*//g'
.
Удалить переводы
| tr -d '\n\r'
.
Заменить </TR>
на новую строку
| sed 's/<\/TR[^>]*>/\n/Ig'
.
Удалить теги TABLE и TR
| sed 's/<\/\?\(TABLE\|TR\)[^>]*>//Ig'
.
Удалить ^<TD>
, ^<TH>
, </TD>$
, </TH>$
| sed 's/^<T[DH][^>]*>\|<\/\?T[DH][^>]*>$//Ig'
.
Заменить </TD><TD>
запятой
| sed 's/<\/T[DH][^>]*><T[DH][^>]*>/,/Ig'
.
Обратите внимание, что если в какой-либо из ячеек таблицы содержатся запятые, вам может понадобиться сначала их экранировать или использовать другой разделитель.
Надеюсь, это кому-нибудь поможет!