【问题标题】:trying to remove *.php from anchor href's with sed尝试使用 sed 从锚点 href 中删除 *.php
【发布时间】:2013-08-28 07:36:46
【问题描述】:
grep -r 'href="[^"]*\.php"' .

这告诉我(理论上)所有锚 href 以 *.php 结尾的文件。快速浏览一下输出即可确认这一点。

然后我尝试使用 sed 从这些锚标记中删除 *.php,但它不起作用(没有更改任何文件)。这是我尝试在 sed 中使用的内容:

sed -i.bak 's/href="([^"]*\.php)"/href="$1"/g' *.php *.xml

有什么想法吗?

谢谢!

【问题讨论】:

    标签: html regex sed grep


    【解决方案1】:

    您的命令中缺少-r 开关,或者您需要反斜杠括号。

    sed -i.bak -r 's/href="([^"]+)\.php"/href="\1"/g' *.php *.xml
    

    并且捕获的组不是$1(如)而是\1

    【讨论】:

    • 似乎也没有做任何事情:(
    【解决方案2】:

    它不起作用,因为你用相同的替换,试试这个:

    sed -i.bak 's/href="\([^"]*\)\.php"/href="\1"/g' *.php *.xml
    

    【讨论】:

    • 似乎这会将<a href="whatever.php"> 变成<a href="">。我希望它变成<a href="whatever">。 IE。删除 *.php 但不要一起删除 href 值。
    • @neubert:已更正。但请注意,它没有在您的问题中写明。
    【解决方案3】:

    当我测试它时,这两个都对我有用。

    使用sed

    sed -i.bak -re 's|href="([^"]*)\.php"|href="\1"|g' *.php *.xml
    

    使用Perl

    perl -i.bak -pe 's|href="([^"]*)\.php"|href="$1"|g' *.php *.xml
    

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 2022-06-30
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多