Решение, основанное на многоплатформенном CLI xidel
и XQuery :
xidel -s --xquery 'for $tr in //tr[position()>1] return join($tr/td, " ")' file
При вводе выборки это дает:
SAVE_DOCUMENT OK 0.406 s
GET_DOCUMENT OK 0.332 s
DVK_SEND OK 0.001 s
DVK_RECEIVE OK 0.001 s
GET_USER_INFO OK 0.143 s
NOTIFICATIONS OK 0.001 s
ERROR_LOG OK 0.001 s
SUMMARY_STATUS OK 0.888 s
Пояснение:
Запрос XQuery for $tr in //tr[position()>1] return join($tr/td, " ")
обрабатывает элементы tr
, начиная со второго (position()>1
, чтобы пропустить строку заголовка) в цикле, и объединяет значения дочерних td
элементов ($tr/td
) с одним пробелом в качестве разделителя.
-s
отключает xidel
(подавляет вывод информации о состоянии).
Хотя html2text
удобно для отображения извлеченных данных, при условии, что машинно-разборный вывод является нетривиальным , к сожалению:
html2text file | awk -F' *\\|' 'NR>2 {gsub(/^\||.\b/, ""); $1=$1; print}'
Команда Awk удаляет скрытые последовательности на основе \b
(на основе backspace), которые html2text
выводит по умолчанию, и анализирует строки в поля на |
, а затем выводит их с пробелом в качестве разделителя ( пробел является стандартным разделителем выходных полей в Awk, например, чтобы изменить его на вкладку, используйте -v OFS='\t'
).
Примечание. Использование -nobs
для подавления последовательностей возврата в исходном коде - это , а не вариант, поскольку в этом случае вы не сможете различать скрытые по умолчанию _
экземпляры, используемые для заполнения и фактические _
символов в данных.
Примечание: учитывая, что html2text
, по-видимому, неизменно использует |
в качестве разделителя столбцов, выше будет работать надежно, только если нет |
экземпляров в данных , которые извлекаются .