【问题标题】:Using curl, grep, and sed to extract data from HTML使用 curl、grep 和 sed 从 HTML 中提取数据
【发布时间】:2014-07-21 20:24:05
【问题描述】:

我正在尝试学习一些终端命令,并看到了这个抓取最新 Google doodle 的链接并将其复制到剪贴板的命令:

$ curl http://www.google.com/doodles#oodles/archive |
grep -A5 'latest-doodle on' | grep 'img src' |
sed s/.*'<img src="\/\/'/''/ | sed s/'" alt=".*'/''/ | pbcopy

我尝试做类似的事情 - 这个命令应该将当天的单词复制到您的剪贴板:

curl "http://www.merriam-webster.com/word-of-the-day/" |
grep -A5 'main_entry_word' | sed s/.*'<strong class="main_entry_word">'/''/ |
sed s/'</\strong>.*'/''/ | pbcopy

我收到一条错误消息:

sed: 1: "s/</\strong>.*//": bad flag in substitute command: '/'

我不太确定自己在做什么,我在其他网站上尝试了一些教程,但我无法弄清楚。我认为主要问题是我不明白大多数“sed”命令的作用。

有人可以帮帮我吗?

【问题讨论】:

  • 您当然收到了这条消息。您使用了四个“/”字符。我建议将所有内容分解成小块并一次尝试一些东西。顺便说一句,我猜如果你颠倒'/'和'\'的顺序,你会得到你想要的。

标签: bash curl sed grep


【解决方案1】:

如果我理解您的要求,您想提取&lt;strong...class="..."&gt;&lt;/strong&gt; 之间的文本,我会使用单个grep 来保存您的grep|grep|sed|sed...

也可以使用 curl 的 -s 选项:

kent$  curl -s "link"|grep -Po '<strong\s+class="main_entry_word">\K.*?(?=</strong>)'

输出:

palmy

【讨论】:

    【解决方案2】:
    sed s/'<\/strong>.*'/''/
    

    sed s@'</strong>.*'@''@
    

    【讨论】:

    • 这修复了错误 - 它返回了当天的单词!但是,我不得不将它从 -A5 更改为 -A0,现在它只返回单词!谢谢!
    • 其实没有'A0'位也一样好用
    猜你喜欢
    • 2015-06-11
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2018-08-23
    • 2021-11-28
    相关资源
    最近更新 更多