Как насчет вырезать
?
cut -c1-2,20-26 --output-delimiter ', ' test.dat
50, Mike
50, Roy
вы можете немного проанализировать возвращаемые htms целевой страницы и немного поиграть с утилитами bash. Это должно сработать:
for i in $(curl https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ | grep net.sf.files | awk -F "=" '{print $2}' | jq '.[].full_path' | awk -F '"' '{printf("https://sourceforge.net/projects/geoserver/files/%s\n",$2)}') ; do curl -o $(echo $i | awk -F '/' '{print $NF}') -L ${i} ; done
В качестве альтернативы вы можно использовать wget (который не совсем такой переносимый):
curl -sS https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ | sed -rn 's_^.*<a href="(https://sourceforge.net/projects/geoserver/files/.*/download)"$_\1_p' | wget -i - --trust-server-names
Возможно, это будет легче понять, если поместить его в (несколько многократно используемый) сценарий с именем:
#!/bin/bash
if [[ -z "$1" || -z "$2" || -n "$3" && "$3" != 'test' ]]; then
echo "Usage: dlist <htmlsource> <regexp> [test]\n <htmlsource> can be a local file or url\n <regex> is the inner part to \"s_^.*${regex}.*\$_\1_p\"\n [test] is the option to show the files to be download"
else
regex="s_^.*$2.*\$_\1_p"
if [[ "$3" == 'test' ]]; then
echo "Using regex $regex:"
regex="s_^.*$2.*\$_ \1_p"
if [[ "$1" == http* ]]; then
curl -sS "$1" | sed -rn "$regex"
else
sed -rn "$regex" "$1"
fi
elif [[ "$1" == http* ]]; then
curl -sS '$1' | sed -rn "$regex" | wget -i - --trust-server-names
else
sed -rn "$regex" "$1" | wget -i - --trust-server-names
fi
fi
, который можно вызвать с помощью (при условии, что он называется dlist ):
dlist https://sourceforge.net/projects/geoserver/files/GeoServer/2.10.1/extensions/ '<a href="(https://sourceforge.net/projects/geoserver/files/.*/download)"'
Первый вариант: просто URL-адрес списка файлов, который вы хотите: вы также можете сохранить файл и указать его в командной строке.
Затем, если вы просматриваете исходный код на веб-странице списка файлов (или загруженную копию), прокрутите и найдите список ссылок, которые дадут вам URL-адрес для поиска. При создании регулярного выражения заключите нужную часть URL-адреса в квадратные скобки (начиная непосредственно перед http) и замените часть, которая изменяется на все URL-адреса, на. *
Второй вариант - это упрощенное регулярное выражение, созданное выше.
Если вы хотите загрузить все те же расширения файлов (те же правила подстановки )в удаленном каталоге, вы можете использовать это:
wget -r -l1 --no-parent --no-check-certificate -Aperl-*.rpm https://mirror.cpsc.ucalgary.ca/mirror/fedora/linux/releases/28/Everything/x86_64/os/Packages/p/
Это загружает все пакеты perl -*.rpm из каталога.