2

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

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

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

4

3 回答 3

5

您快到了。尝试使用不打印不匹配数据的-n选项并添加修饰符以打印替换字符串sedps|||

curl website.com | sed -n -r 's|.*standards\.xml\?revision=([0-9]+).*|\1|p'
于 2013-10-30T17:22:56.133 回答
2

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

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

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

于 2013-10-30T17:16:54.110 回答
1
curl website.com | sed -n '/xml/ {s|.*standards\.xml\?revision=([^&]+).*|\1|p;q;}'

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

于 2013-10-30T17:46:15.913 回答