2017-07-27 85 views
1

中提取信息,我尝试提取标签中的信息:使用此命令如何使用grep和正则表达式特定的标签

<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,但是它没有任何回应。我的错误是什么?提前致谢!

+0

grep和正则表达式是用来解析HTML ...完全错误的工具,如果正则表达式是你的情况不够好,你需要'grep -oP'这是不可用的...所以然后使用'sed'或'awk' ... grep主要是为了找到不是文本操作 – Sundeep

回答

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 
+0

我尝试了参数'-Po',但是我得到错误'grep:对-P选项的支持没有编译进这个--disable-perl-regexp二进制文件,因为我在iOS环境(终端) –

+0

@ GregorIsack:你有权访问'perl',如果是的话,看看我的扩展答案。 –

+0

我刚刚在我的设备上安装了'perl',它完美的工作!但是perl软件包正在消耗我设备的有限存储容量。如果没有更好的答案,我会将其标记为答案。感谢您的帮助! –

1

您还没有幸免于在</div>的最后/

正确的正则表达式应该是以下几点:

^<div class=\"rpt_price rpt_price_1\">.*<\/div>$

对于正则表达式,this是测试当你创建一个你的结果会是怎样一个伟大的工具。

+0

仍然没有回报,虽然我确定后的正则表达式你的改正作品!我开始怀疑'curl' –

+1

正则表达式应该没问题,它匹配你正在搜索的东西。让我检查卷曲。你的目标是哪个网站? – dirtydanee

+0

这个正则表达式的工作原理,但它不会仅仅是部分:“文本”,而是整个表达式。 –