Sed
從已經下載的 index.html 中提取 pdf 文件以獲取它們,即使使用 grep 有多個 pdf
我有一個
index.html
包含指向 PDF 文件的 href 連結的文件。當我這樣做時:
grep -i 'href=' index.html
,我得到例如:<p>Télécharger : <a href="https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2019_Henrot-Versillé-C1_L1.pdf"><span style="color: #0000ff;">Cours n°1</span></a> (S. Henrot-Versillé), <span style="color: #0000ff;"><a href="https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2019_Henrot-Versillé_C1_L2.pdf">Cours n°2</a></span> (S. Henrot-Versillé), <a href="https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Henrot-Versillé_C3.pdf"><span style="color: #0000ff;">Cours n°3</span></a> (S. Henrot-Versillé)</p> <p>Télécharger le cours sur <a href="https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Martinelli_C2_L1_Bayesian.pdf">la méthode bayésienne</a> (M. Martinelli) et <a href="https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Martinelli_C2_TD_Bayesian.pdf">son TD</a> (M. Martinelli).</p></div> <p><a href="https://github.com/mhuertascompany/EDE19" title="GitHub Deep Learning 2019 EDE">https://github.com/mhuertascompany/EDE19</a></p> <p><a href="https://colab.research.google.com/drive" title="TDs Deep Learning 2019">https://colab.research.google.com/drive</a></p></div> <a href="https://www.facebook.com/euclid.france" class="icon"> <a href="https://twitter.com/Euclid_FR" class="icon"> <a href="#" class="icon"> <a href="https://ecole-euclid.cnrs.fr/feed/" class="icon">
現在,我想用 gsed (在 MacOS Catalina 上)管道 grep 的這個輸出,以便提取 PDF 文件的所有完整 href,即使在同一行上有多個 PDF 連結。
我首先嘗試:
grep -i 'href=' index.html | gsed 's/href="\(.*pdf\)"/\1/g'
但這不起作用,如您所見,我只會列印第一個 PDF 連結,而不是所有 PDF 連結(在同一個連結上),那麼此外,如何列印所有模式匹配?
目標是在此之後下載文件中存在的所有 PDF
index.html
文件任何幫助都會很棒。
因為你有 GNU sed,你可以安裝 GNU awk。使用 GNU awk 進行多字元 RS 和 RT:
$ awk -v RS='href="http[^"]+.pdf"' -F'"' 'RT{$0=RT; print $2}' file https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2019_Henrot-Versillé-C1_L1.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2019_Henrot-Versillé_C1_L2.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Henrot-Versillé_C3.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Martinelli_C2_L1_Bayesian.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Martinelli_C2_TD_Bayesian.pdf
否則在每個 UNIX 機器上的任何 shell 中使用任何 awk:
$ awk '{ while ( match($0,/href="http[^"]+.pdf"/) ) { split(substr($0,RSTART,RLENGTH),f,/"/) print f[2] $0 = substr($0,RSTART+RLENGTH) } }' file https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2019_Henrot-Versillé-C1_L1.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2019_Henrot-Versillé_C1_L2.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Henrot-Versillé_C3.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Martinelli_C2_L1_Bayesian.pdf https://ecole-euclid.cnrs.fr/wp-content/uploads/EDE2018_Martinelli_C2_TD_Bayesian.pdf
只需將該輸出通過管道傳輸到
xargs -n 1 curl -O
, 即可下載 PDF(假設 URL 中沒有空格)。