跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 怎么用 bash 的正则表达式从一大堆超链接中筛选中指定的链接?
未分類
12 1 月 2021

怎么用 bash 的正则表达式从一大堆超链接中筛选中指定的链接?

怎么用 bash 的正则表达式从一大堆超链接中筛选中指定的链接?

資深大佬 : gnomeek 0

请教大佬们一个 regex 的问题。背景是一个只含大量超链接的 html 网页,需要从这些超链接中筛选出指定的链接并下载,大概的代码如下:

wget www.abc.com/result.html res_url=$something wget $res_url 

result.html 长下面这样:

<a href=’www.abc.com/file1′>file1<br/><br/><a href=’www.abc.com/file2′>file2<br/><br/><a href=’www.abc.com/file3′>file3<br/><br/><a href=’www.abc.com/file4′>file4<br/><br/>

res_url 长这样:

www.abc.com/file3

我之前的方法如下:

tmp=$(grep -o "file2.*/file3" result.html) res_url=$(echo "$tmp" | grep -o "http.*/file3") 

但是现在的问题是,这些超链接的顺序是变化的,有可能 file3 的链接下次就在 file2 之前,上面的方法不太稳定。请教各位大佬,怎么使用 shell 的正则表达式来从如下的原始字符串中提取出目标字符串呢?

大佬有話說 (9)

  • 資深大佬 : TimePPT

    专业的事交给专业的工具吧,这个需求 lxml 这种 python 解析库几行的事

  • 資深大佬 : wd

    我看了一会实在看不懂主的问题.. 放弃了

  • 主 資深大佬 : gnomeek

    @wd hhh- -其实就是一个 jenkins 的 build_result.html,需要写一个脚本来提取出 build 中的一些文件(也就是指定的超链接)

  • 主 資深大佬 : gnomeek

    @TimePPT 是的,用 python 会方便很多。不过还是用 bash 解决了- -看来还是不能加班,脑子都快成浆糊了

  • 主 資深大佬 : gnomeek

    解决了
    “`
    wget www.abc.com/build_result.html
    array=($(grep -ohr -E “https?://[a-zA-Z0-9./_&[email protected]$%?~#-]*” build_result.html))
    for element in ${array[@]}
    do
    if [[ “$element” == *”/file2″* ]]; then
    wget $element
    fi
    done
    “`

  • 資深大佬 : Lax

    最好用专业的工具,使用 xpath 或者 css selector 的库去选择对应的元素。

    如果非要用正则,就好好看看文档。具体到这里,可以先把全部链接( href )匹配出来,再进行处理。

    > grep -i -E -o “href='([^’]*file[0-9]*)'”

  • 資深大佬 : imn1

    问题是你的正则为何这样写?关 file2 什么事?能匹配 href…file3 这段就够了啊
    自己搜索一下正则的贪婪、非贪婪

  • 主 資深大佬 : gnomeek

    @imn1 但是他们的 prefix 是一模一样,且不确定的。比如会有一些版本号的信息,如 www.abc.com/123/file1.txt 这样,每次的版本号都不一样,没法那么精细的匹配

  • 主 資深大佬 : gnomeek

    @Lax 对- -是我脑子没转过来,grep 存成 array,再遍历用 grep 查询 substring 就好了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具