grep -r 'href="[^"]*\.php"' .
这告诉我(理论上)所有以 *.php 结尾的锚href的文件。快速浏览一下输出证实了这一点。
所以我然后尝试使用 sed 从这些锚标记中删除 *.php 并且它不起作用(没有文件被更改)。这是我尝试在 sed 中使用的内容:
sed -i.bak 's/href="([^"]*\.php)"/href="$1"/g' *.php *.xml
有任何想法吗?
谢谢!
您的命令中缺少-r
开关,或者您需要反斜杠括号。
sed -i.bak -r 's/href="([^"]+)\.php"/href="\1"/g' *.php *.xml
并且捕获的组不是$1
(如在perl中)而是\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
它不起作用,因为你用相同的替换,试试这个:
sed -i.bak 's/href="\([^"]*\)\.php"/href="\1"/g' *.php *.xml