搜索/替换数据库中的变量文本

时间:2017-11-05 17:31:32

标签: mysql regex sed

我需要替换数据库列中的一些文本。 示例:将[youtube]zWg85ALiCUY[/youtube]替换为//youtube.com/watch?v=zWg85ALiCUY

我该如何正确地做到这一点?

我尝试过转储数据库并运行以下命令。

sed -i -E "s/\[youtube\](.+)\[\/youtube]/https:\/\/www\.youtube\.com\/watch\?v=\1/" dump.sql

它没有正确替换所有实例。 还有其他更好的办法?我对regExp并不是特别擅长。

更新 有些帖子中有多个[youtube] BBCode。

[youtube]zWg85ALiCUY[/youtube] some text... [youtube]huawda5hy[/youtube]

每个都需要更新。

2 个答案:

答案 0 :(得分:2)

您可以在纯MySQL代码中执行此操作,而无需使用REGEX。

<强>查询

SELECT 
 REPLACE(REPLACE(col, '[youtube]', '//youtube.com/watch?v='), '[/youtube]', '')
FROM (
  SELECT '[youtube]zWg85ALiCUY[/youtube]' AS `col`
) 
 records 

<强>结果

REPLACE(REPLACE(col, '[youtube]', '//youtube.com/watch?v='), '[/youtube]', '')  
--------------------------------------------------------------------------------
//youtube.com/watch?v=zWg85ALiCUY      

答案 1 :(得分:0)

对数据库运行以下命令:

update table
set column_name = replace(column_name, '[youtube]zWg85ALiCUY[/youtube]', '//youtube.com/watch?v=zWg85ALiCUY')