0
grep -r 'href="[^"]*\.php"' .

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

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

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

有任何想法吗?

谢谢!

4

3 回答 3

1

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

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

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

于 2013-08-25T20:53:12.773 回答
1

当我测试它时,这两种方法都对我有用。

使用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
于 2013-08-25T21:35:35.127 回答
1

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

sed -i.bak 's/href="\([^"]*\)\.php"/href="\1"/g' *.php *.xml
于 2013-08-25T20:54:10.980 回答