【问题标题】:Use sed to grab a string使用 sed 抓取字符串
【发布时间】:2013-10-31 01:46:15
【问题描述】:

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

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

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

【问题讨论】:

  • 你应该使用 grep...
  • 我该如何使用 grep 呢?

标签: regex sed


【解决方案1】:

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

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

【讨论】:

  • 啊,太完美了!谢谢楼主
  • @Konnor 欢迎您!看来你是这个网站的新手。如果有任何 ans 对您有用,请考虑通过单击 ans 旁边的空心绿色刻度线来接受该 ans。附言我注意到您没有接受您的 3 个答案中的任何一个。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:
    curl website.com | sed -n '/xml/ {s|.*standards\.xml\?revision=([^&]+).*|\1|p;q;}'
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2019-08-11
      • 2013-05-16
      • 1970-01-01
      相关资源
      最近更新 更多