全局搜索并替换引用的图像路径?

时间:2012-04-23 21:09:03

标签: html regex replace grep

我有各种图像引用如下:

src="http://myblog.files.example.com/2011/08/image-1.jpg"
src="http://myblog.files.example.com/2010/05/image-2.jpg"
src="http://myblog.files.example.com/2012/01/image-3.jpg"

正如您所看到的,图像路径中唯一发生变化的是最后的数字(日期)。我想做的只是将所有图像的路径更改为:

/sites/default/files/blog-images/

......所以他们都会像:

 src="/sites/default/files/blog-images/image-1.jpg"
 src="/sites/default/files/blog-images/image-2.jpg"
 src="/sites/default/files/blog-images/image-3.jpg"

我想知道是否有办法使用正则表达式或其他方法来做到这一点?路径中有数百个图像都具有不同的数字,因此手动执行此操作并不理想。

完整的代码示例:

<a href="http://myblog.files.example.com/2011/07/myimage-1.jpg">
<img class="alignright size-medium wp-image-423" title="the title" src="http://myblog.files.example.com/2011/07/myimage-1.jpg" alt="the alt" width="300" height="199" />
</a>

3 个答案:

答案 0 :(得分:1)

src="http:\/\/myblog.files.example.com/\d{4}/\d{2}/([^\s]+)"

$1中搜索并捕获图像文件名。现在,您可以使用/sites/default/files/blog-images/$1

进行替换

如果您的编辑器不支持范围,那么您需要重复\d

src="http:\/\/myblog.files.example.com/\d\d\d\d/\d\d/([^\s]+)"

http://regexr.com?30o8e

答案 1 :(得分:0)

一个简单的sed one liner可以解决这个问题:

这个要测试:

sed -r 's@http://myblog.files.example.com/[0-9]{4}/[0-9]{2}/@/sites/default/files/blog-images/@g' FILE

这一个更改文件

sed -ri 's@http://myblog.files.example.com/[0-9]{4}/[0-9]{2}/@/sites/default/files/blog-images/@g' FILE

答案 2 :(得分:0)

有很多方法可以做你想做的事情。由于您在本文中标记了“grep”并且未指定任何特定的编程语言,因此我假设您要使用UNIX。

首先,测试一下这个命令:

find . -type f | sed 's/\.\/\([0-9]\{4\}\/[0-9]\{2\}\/\)\(.*\)/mv & sites\/default\/files\/blog-images\/\2/'

它将打印出将要执行的“mv”命令列表,如果它按照你想要的方式工作,你可以像sh一样将它输入:{/ p>

find . -type f | sed 's/\.\/\([0-9]\{4\}\/[0-9]\{2\}\/\)\(.*\)/mv & sites\/default\/files\/blog-images\/\2/' | sh