我想列出我們的源代碼參考的所有域,允許只查找那些靜態參考并以 https?:// 開頭的域。例如,我嘗試了以下方法:
find -s [^.]* -print0 | xargs -0 sed -En 's/.*https?:\/\/([a-z0-9\-\.\_] ).*/\1/p' | sort | uniq
錯誤在于,當一行中有多個域時,只會回傳一個域。這可以用簡單的 shell 工具來解決,即不完全決議 HTML 嗎?
uj5u.com熱心網友回復:
正則運算式.*是貪婪的,因此將它放在正則運算式的開頭和結尾將丟棄同一行上的任何其他 URL。
標準grep無法列印捕獲組,如([a-z0-9-._] ),但如果有perl,請替換:
sed -En 's/.*https?:\/\/([a-z0-9\-\.\_] ).*/\1/p'
有了這個:
perl -nle 'print $1 while m{https?://([a-z0-9-._] )}g'
https?://([a-z0-9-._] )是我們新的正則運算式,只匹配我們正在尋找的內容,保持每一行完整。while m{...}g遍歷正則運算式的每個匹配項。print $1顯示我們的正則運算式的第一次捕獲([a-z0-9-._] )
您的最終命令將是:
find -s [^.]* -print0 | xargs -0 perl -nle 'print $1 while m{https?://([a-z0-9-._] )}g' | sort | uniq
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/315321.html
標籤:javascript 正则表达式 猛击 zsh
