我目前正在帮助一位朋友在一个数据库驱动的网站上重新组织数百张图像。我已经离线生成了一个新的、重组的图像路径列表,并希望用新路径替换数据库的 sql 导出中的每个匹配图像引用。
编辑:这是我想要实现的一个例子
new_paths_list.txt是我在将所有现有图像组织到文件夹后使用批处理脚本生成的文件。在此之前,所有图像都在几个文件夹中。此生成列表的示例可能是:
image/data/product_photos/telephones/snom/snom_xyz.jpg
image/data/product_photos/telephones/gigaset/giga_xyz.jpg
my_exported_db.sql (从网站导出的数据库)的示例可能是:
...
,(110,32,'data/phones/snom_xyz.jpg',3),(213,50,'data/telephones/giga_xyz.jpg',0),
...
我想要的结果是my_exported_db.sql是:
...
,(110,32,'data/product_photos/telephones/snom/snom_xyz.jpg',3),(213,50,'data/product_photos/telephones/gigaset/giga_xyz.jpg',0),
...
一些伪代码来说明:
1/ 在 my_exported_db.sql 中找到第一个图像名称,例如 'snom_xyz.jpg'。
2/ 在 new_paths_list.txt 中找到相同的图像名称
3/ 如果存在,复制整行(路径和文件名)
4/ 将此图像的 my_exported_db.sql 中的整个路径替换为复制的行
5/ 对 my_exported_db.sql 中的所有其他图像名称重复
似乎与图像名称匹配的正则表达式是:
([^)''"/])+\.(?:jpg|jpeg|gif|png)
和一个匹配图像名称,完整的路径(相对或绝对)是:
\bdata[^)''"\s]+\.(?:jpg|jpeg|gif|png)
我环顾四周,发现 Sed 或 Awk 可能能够做到这一点,但一些指针将不胜感激。我知道这只有在没有重复文件名的情况下才能正常工作。