使用sed抓取一个字符串

时间:2013-10-30 17:11:55

标签: regex sed

我正在使用curl从网站获取html然后我只需要一个介于'standards.xml?revision ='和'& amp'之间的特定字符串。我正在使用sed这样做,但我似乎无法正确使用正则表达式并需要一些帮助。

curl website.com | sed -r 's|.*standards\.xml\?revision=([0-9]+).*|\1|'

我得到的输出是完整的HTML - 任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:5)

你快到了。尝试将-n选项与sed一起使用,不要打印不匹配的数据,并将p修饰符添加到s|||以打印替换字符串

curl website.com | sed -n -r 's|.*standards\.xml\?revision=([0-9]+).*|\1|p'

答案 1 :(得分:2)

您可以使用grep -oP(PCRE选项):

grep -oP 'standards\.xml\?revision=\K[0-9]+'

\K重置匹配的文本,因此只返回部分[0-9]+

答案 2 :(得分:1)

curl website.com | sed -n '/xml/ {s|.*standards\.xml\?revision=([^&]+).*|\1|p;q;}'

从之前的sed [0-9] +仅当数字出现时,[^&] +更合适。 非常好用'和|为了避免问题\所以我选择它: - )