【问题标题】:How to use grep and regex to extract information within specific tag如何使用 grep 和 regex 提取特定标签内的信息
【发布时间】:2018-01-02 18:48:15
【问题描述】:

我尝试提取标签内的信息:

<div class="rpt_price rpt_price_1">THE TEXT</div>

使用这个命令:

t=$(curl -v --silent http://somewebsite.info/ 2>&1 | grep -E "^<div class=\"rpt_price rpt_price_1\">.*</div>$"); echo $t

它应该返回THE TEXT,但它没有回应。我的错误是什么?提前致谢!

【问题讨论】:

  • grep 和 regex 是用于解析 html 的完全错误的工具...如果 regex 对您的情况足够好,您需要 grep -oP 这对您不可用...所以然后使用sedawk... grep 主要用于查找不是文本操作

标签: ios regex linux curl grep


【解决方案1】:

以下作品使用:

grep -Po "<div class=\"rpt_price rpt_price_1\">\K(.*)(?=</div>$)"

-P-o 选项在 unix stackexchange 处进行了描述。 \Kunix stackexchange上也有很好的解释。

\K(.*) 的用法将仅输出匹配项和以下文本。使用(?=...$),我排除了其余的文本。

测试:

echo "<div class=\"rpt_price rpt_price_1\">THE TEXT</div>" | grep -Po "<div class=\"rpt_price rpt_price_1\">\K(.*)(?=</div>$)"

输出:

THE TEXT

另一种可能是直接使用perl,解释为here on superuser

perl -ne 'print $1 if /\<div class="rpt_price rpt_price_1">(.*?)\<\/div>/s'

测试:

echo "<div class=\"rpt_price rpt_price_1\">THE TEXT</div>" | perl -ne 'print $1 if /\<div class="rpt_price rpt_price_1">(.*?)\<\/div>/s'

输出:

THE TEXT

【讨论】:

  • 我确实尝试了参数-Po,但我收到了错误grep: Support for the -P option is not compiled into this --disable-perl-regexp binary,因为我在iOS环境(终端)中
  • @GregorIsack:您是否可以访问perl,如果可以,请参阅我的扩展答案。
  • 我刚刚在我的设备上安装了perl,它运行良好!但是 perl 包正在消耗我设备有限的存储容量。如果没有更好的答案,我会将其标记为答案。感谢您的帮助!
  • 不客气!我看不到其他方法,因为grep 无法在不使用 perl 选项 (-P) 的情况下从表达式中提取字符串,因为如果没有它,它们就不会是可用的前瞻选项 ((?=...$))。但也许其他一些人有我不知道的解决方案;-D。
  • 我可以问一个问题,因为我不熟悉perl,在您的示例中,您使用管道传输输出,我可以为源分配一个变量并将其输入 perl,如果是,我该怎么做?例如,source=$(echo something); perl $source
【解决方案2】:

您还没有逃脱&lt;/div&gt; 中的最后一个/

正确的正则表达式应该如下:

^&lt;div class=\"rpt_price rpt_price_1\"&gt;.*&lt;\/div&gt;$

对于正则表达式,this 是一个很好的工具,可以在您创建正则表达式时测试您的结果。

【讨论】:

  • 仍然没有返回,但我确信您更正后的正则表达式有效!我开始怀疑curl
  • 正则表达式应该没问题,它与您正在搜索的内容匹配。让我检查一下卷曲。你的目标是什么网站?
  • 这个正则表达式有效,但它不会只提取部分:THE TEXT,而是整个表达式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 2019-08-20
  • 1970-01-01
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多