Извлечение PDF из HTML с помощью Sed - PullRequest
0 голосов
/ 13 декабря 2018

Я пишу сценарий bash, который извлекает файлы PDF из HTML и загружает его.Вот строка кода, которая извлекает:

 curl -s https://info.uqam.ca/\~privat/INF1070/ |
              sed 's/.*href="//' |
              sed 's/".*//' |
              sed '/^[^\.]/d' |
              sed '/\.[^p][^d][^f]$/d' |
              sed '/^$/d' |
              sed '/\/$/d'

Результат:

./07b-reseau.pdf
./07a-reseau.pdf
./06b-script.pdf
./06a-script.pdf
./05-processus.pdf
./04b-regex.pdf
./181-quiz1-g1-sujet.pdf
./03b-fichiers-solution.pdf
./04a-regex.pdf
./03d-fichiers.pdf
./03c-fichiers.pdf
./03b-fichiers.pdf
./03a-fichiers.pdf
./02-shell.pdf
./01-intro.pdf
./01-intro.pdf
./02-shell.pdf
./03a-fichiers.pdf
./03b-fichiers.pdf
./03b-fichiers-solution.pdf
./03c-fichiers.pdf
./03d-fichiers.pdf
./04a-regex.pdf
./04b-regex.pdf
./05-processus.pdf
./06a-script.pdf
./06b-script.pdf
./07a-reseau.pdf
./07b-reseau.pdf
./181-quiz1-g1-sujet.pdf

Работает нормально, но мне было интересно, есть ли лучший способ (всегда с использованием sed) чтобы сделать это с помощью команд sed.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Это может работать для вас (GNU sed):

sed -r '/\n/!s/href="(\.[^"]*\.pdf)"/\n\1\n/g;/\`[^\n]*\.pdf$/MP;D' file

Это помещает каждый файл PDF в отдельную строку (несколько строк в строке) и выводит только строку, которая заканчивается на .pdf.

0 голосов
/ 13 декабря 2018

Вы можете перевести свой исходный вопрос в нечто вроде Как вывести только захваченные группы с помощью sed? .Этот однострочный текст должен помочь вам:

curl -s https://info.uqam.ca/\~privat/INF1070/ | sed -rn 's/.*href="(.*\.pdf)".*$/\1/p'

, который производит желаемый результат.

Где комбинация опции -n (не печатать) и p flag (печатать совпадающее) будет печатать только те строки, где происходит замена на основе регулярного выражения .*href="(.*\.pdf)".*$.Значение атрибута href (группа захвата в скобках) имеет обратную ссылку \1, поэтому вся строка заменяется на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...