【问题标题】:Use REGEX with grep on Debian在 Debian 上使用 REGEX 和 grep
【发布时间】:2017-02-27 15:52:05
【问题描述】:

我尝试在我的脚本中使用正则表达式,但我不能做我想做的事。我觉得我做错了!

我有这个字符串: mywebsite.fr/details.php?id=123456

我正在尝试获取这部分内容: details.php?id=123456

我正在使用:

echo "http://mywebsite.fr/details.php?id=123456" | grep "/details(.*)/"

该命令不返回任何结果.. 我的正则表达式有什么误解吗?

提前感谢您的回答
昆汀

【问题讨论】:

    标签: regex shell debian


    【解决方案1】:

    正如@eThang 回答的那样,您不应该使用/; grep 不使用/ 作为正则表达式分隔符。

    如果您只想获取匹配的部分,请使用-o 选项:

    $ echo "http://mywebsite.fr/details.php?id=123456" | grep -o "details.*"    
    details.php?id=123456
    
       -o, --only-matching
              Print only the matched (non-empty) parts of a matching line, with each such part on
              a separate output line.
    

    GNU grep GREP(1)

    【讨论】:

    • 它有效!我对正则表达式的了解还不够多,谢谢我做得太复杂了!
    • 如果我需要的字符串出现多次,如何选择停止到第一个?不知道你懂没^^'
    • 我有一个带有这种类型块的网页:<p><a href="download.php?id=1234&name=file.torrent"></p>. . .<p><a href="download.php?id=1234&name=file.torrent"></p> 我正在使用这个命令:grep -o "download.*.torrent" 我有整个块,内容介于两者之间。你看到了吗?
    • @mangasource, echo '<p><a href="download.php?id=1234&name=file.torrent"></p>. . .<p><a href="download.php?id=1234&name=file.torrent"></p>' | grep -o 'download.php[^"]*"' | head -1 ?
    • @mangasource,要查看差异,请尝试不使用| head -1
    【解决方案2】:

    尝试删除正斜杠。 grep 不需要它们。

    echo "http://mywebsite.fr/details.php?id=123456" | grep "details(.*)"
    

    【讨论】:

      猜你喜欢
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多