Как я могу использовать hxselect для генерации результата массива?

Я использую hxselect для обработки HTML-файла в bash.

В этом файле есть несколько элементов div, определенных с помощью класса.row.

В bash я хочу извлечь эти "строки" в массив. (DIV многопоточны, поэтому простое чтение построчно не подходит.)

Возможно ли этого добиться? (С основными инструментами, awk, grep и т. Д.)

После присвоения строк массиву я хочу продолжить его обработку:

for row in ROWS_EXTRACTED; do
PROCESS1($row)
PROCESS2($row)
done

Спасибо!

2 ответа

Одна возможность - поместить содержимое тегов в массив, каждый элемент которого должен быть заключен в кавычки. Например:

# Create array with " " as separator
array=`cat file.html | hxselect -i -c -s '" "' 'div.row'`
# Add " to the beginning of the string and remove the last
array='"'${array%'"'}

Затем обработка в цикле for

for index in ${!array[*]}; do printf "  %s\n\n" "${array[$index]}"; done

Если теги содержат символ кавычки, другим решением было бы поместить символ разделителя, который не найден в содержимом тегов (в моем примере это §):

array=`cat file.html | hxselect -i -c -s '§' 'div.row'`

Затем сделайте лечение с помощью awk:

# Keep only the separators to count them with ${#res}
res="${array//[^§]}"
for (( i=1; i<=${#res}; i++ ))
do
    echo $array2 | awk -v i="$i" -F § '{print $i}'
    echo "----------------------------------------"
done

Следующие инструкции hxselect для разделения совпадений с помощью вкладки удаляет все новые строки, а затем переводит разделители вкладок в новые строки. Это позволяет вам перебирать элементы div в виде строк с read:

#!/bin/bash

divs=$(hxselect -s '\t' .row < "$1" | tr -d '\n' | tr '\t' '\n')

while read -r div; do
    echo "$div"
done <<< "$divs"

Учитывая следующие тестовые данные:

<div class="container">
  <div class="row">
    herp
    derp
  </div>
  <div class="row">
    derp
    herp
  </div>
</div>

Результат:

$ ./test.sh test.html
<div class="row">    herp    derp  </div>
<div class="row">    derp    herp  </div>
Другие вопросы по тегам