【问题标题】:How to search and delete html link in sql using regex and command line UNIX如何使用正则表达式和命令行 UNIX 在 sql 中搜索和删除 html 链接
【发布时间】:2015-06-16 04:55:31
【问题描述】:

查看我们的 Magento 应用程序,我在 cms 页面中发现了几个未使用的链接,因此,我导出了表,我有一个 sql 文件,现在我想使用命令行替换/删除这些链接。

我正在尝试使用正则表达式模式来做这件事,但我的正则表达式经验是基于玩这个regex interactive web

这些页面中有很多链接,但我只想删除那些链接到 domainname.comdomainname.es 的链接,所以,使用此类链接最好的方法是:

<a title=\"CRADLE 1-SLOT SER USB CK30/31 NOTES\" href=\"http://domainname.com/terminales-intermec-accesorios/3813-cradle-1-slot-ser-usb-ck3031-notes.html\"></a>

<a title=\"CRADLE 1-SLOT SER USB CK30/31 NOTES\" href=\"http://domainname.es/terminales-intermec-accesorios/3813-cradle-1-slot-ser-usb-ck3031-notes.html\"></a>

我试图用grep 和/或sed 做一些事情,但是用我的正则表达式

grep “\w+\=+\\\"+\w+\:\/\/+(s|\w)+(s|\.)+(s|plusexpress)+\.(\/a&gt;)\b”

它不起作用,所以,欢迎任何帮助!

编辑:

这个 sqlfile 只有这样的字符串:

d style=\"text-align: center;\">&nbsp;<img src=\"http://www.anotherdomain.com/media/small_image.jpg\" alt=\"\" width=\"117\" height=\"117\" /><br /></td>\r\n<td style=\"text-align: center;\">\r\n<p>PSU WALL AC CV30 NOTES</p>\r\n</td>\r\n<td>Univ Supply Circ 5P 12V 50W FW5012 RoHS.<br /></td>\r\n<td>Requires AC power cord (CAIEC) Will not power heated display element.&nbsp;</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align: left;\">\r\n<p><a href=\"http://www.anotherdomain.com/checkout/cart/add?product=7797\" target=\"_blank\">VE011-2013</a><a title=\"WALL MOUNT CABLE PROTECTOR CV30  NOTES\" href=\"http://domainname.es/termina-accesorios/3982-wall-mount-cable-protector-cv30--notes.html\"></a></p>\r\n</td>\r\n<td style=\"text-align: center;\"><img src=\"http://www.anotherdomain.com/media/small_image.jpg\" alt=\"\" width=\"117\" height=\"117\" /><br /></td>\r\n<td style=\"text-align: center;\">\r\n<p>WALL MOUNT CABLE PROTECTOR CV30 NOTES<a title=\"WALL MOUNT CABLE PROTECTOR CV30  NOTES\" href=\"http://www.anotherdomain.com/ve011-2013\"></a></p>\r\n</td>\r\n<td>&nbsp;</td>\r\n<td>&nbsp;</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align: left;\">\r\n<p><a href=\"http://www.anotherdomain.com/checkout/cart/add?product=3681\" target=\"_blank\">VE011-2011</a><a title=\"ADAPTOR MOUNTING PLATE CV30 \" href=\"http://domainname.es/termina-accesorios/3981-adaptor-mounting-plate-cv30-.html\"></a></p>\r\n</td>\r\n<td style=\"text-align: center;\"><img src=\"http://www.anotherdomain.com/media/small_image.jpg\" alt=\"\" width=\"117\" height=\"117\" /><br /></td>\r\n<td style=\"text-align: center;\">\r\n<p>ADAPTOR MOUNTING PLATE CV30</p>\r\n</td>\r\n<td><br /></td>\r\n<td>&nbsp;</td>\r\n</tr>\r\n<tr>\r\n<td style=\"text-align: left;\">\r\n<p><a href=\"http://www.anotherdomain.com/checkout/cart/add?product=3680\" target=\"_blank\">VE011-2006</a></p>\r\n</td>\r\n<td style=\"text-align: center;\"><span style=\"color: #ff0000;\"><img title=\"VE011-2006 MOUNT KIT BRACKET WALL CV30\" src=\"h

【问题讨论】:

  • 您正在使用 html 或同化,因此您还应该为通用模式假设很多变体。对于 grep/sed/awk 等非面向 HTML 的产品,回复将不是防弹的
  • 正则表达式不是正确的工具:blog.codinghorror.com/parsing-html-the-cthulhu-way

标签: regex unix sed grep html-parsing


【解决方案1】:

假设链接在 1 行(只有这一行,所以删除整行)并基于您的示例

grep -v 'href=\\"http://[^/"]*(domainname.com|domainname.es)/' YourFile

它会删除带有此 href 链接的所有行,无论标签是什么(如果需要,您可以过滤到 &lt;A 标签)

【讨论】:

  • 不,链接有时不在不同的行中,它们来自通过所见即所得存储在 magento cms_pages (一个 mysql 表)的列中的字符串,所以,我有一个大字符串,在这个里面我想替换以“" 开头的整个 HTML 标记我猜,好的正则表达式应该是这样的:搜索“" 结尾
  • 我想我快要找到它了:()+() 我正在使用sed 在另一个文件中获取此正则表达式的输出,但现在我需要如何测试sed 是否工作正常, diff 我不明白输出
  • 在这种情况下尝试使用comm -3 OldFile NewFile-13 而不是diff。同样对于 sed,在 s/// 中使用除 / 之外的另一个分隔符(例如:s:::)以允许 / 在您的正则表达式中作为字符而不转义它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多