在数据库表的所有行中搜索指定字符串并将其替换为新字符串,智能处理PHP序列化数据,不修改主键值。
适合在迁移站点、更改域名或批量更新内容时使用,支持预演模式、导出SQL文件以及多站点网络替换。
| 参数 | 说明 |
|---|---|
<old> |
要在数据库中搜索的字符串。 |
<new> |
将第一个字符串的实例替换为此新字符串。 |
[<table>...] |
限制替换范围的数据库表列表。支持通配符,例如 'wp_*options' 或 'wp_post*'。 |
--dry-run |
运行整个搜索/替换操作并显示报告,但不保存对数据库的更改。 |
--network |
在多站点安装中,在所有注册到 $wpdb 的表中搜索/替换。 |
--all-tables-with-prefix |
对匹配表前缀的所有表启用替换,即使未注册到 $wpdb。 |
--all-tables |
对数据库中所有表启用替换,无论前缀如何,即使未注册到 $wpdb。覆盖 –network 和 –all-tables-with-prefix。 |
--export[=<file>] |
将转换后的数据写入 SQL 文件,而不是保存到数据库。如果未提供 ,则输出到 STDOUT。 |
--export_insert_size=<rows> |
执行 SQL 导出时定义单条 INSERT 语句的行数。默认为 50。 |
--skip-tables=<tables> |
不要在特定表上执行替换。使用逗号指定多个表。支持通配符,例如 'wp_*options' 或 'wp_post*'。 |
--skip-columns=<columns> |
不在特定列上执行替换。使用逗号指定多个列。 |
--include-columns=<columns> |
在特定列上执行替换。使用逗号指定多个列。 |
--precise |
强制使用 PHP(而不是 SQL),这更彻底但更慢。 |
--recurse-objects |
启用递归进入对象以替换字符串。默认为 true;传递 –no-recurse-objects 以禁用。 |
--verbose |
在更新时打印行到控制台。 |
--regex |
使用正则表达式(无分隔符)运行搜索。警告:使用 –regex 时,search-replace 执行时间会延长约 15-20 倍。 |
--regex-flags=<regex-flags> |
为正则表达式搜索替换传递 PCRE 修饰符(例如 ‘i’ 表示不区分大小写)。 |
--regex-delimiter=<regex-delimiter> |
正则表达式的分隔符。如果出现在搜索字符串中,必须转义。默认值为 chr(1) 的结果。 |
--regex-limit=<regex-limit> |
每行正则表达式的最大可能替换数(或每行每反序列化数据位)。默认为 -1(无限制)。 |
--format=<format> |
以特定格式渲染输出。默认:table。选项:table、count。 |
--report |
生成报告。默认为 true。 |
--report-changed-only |
仅报告更改的字段。默认为 false,除非记录日志时,默认为 true。 |
--log[=<file>] |
记录更改的项目。如果未提供 或为 “-“,则输出到 STDOUT。警告:会导致显著变慢,类似于或更差于启用 –precise 或 –regex。 |
--before_context=<num> |
用于记录日志,在旧匹配和新替换之前显示的字符数。默认为 40。如果未记录日志则忽略。 |
--after_context=<num> |
用于记录日志,在旧匹配和新替换之后显示的字符数。默认为 40。如果未记录日志则忽略。 |
$ wp search-replace 'http://example.test' 'http://example.com' --skip-columns=guid
$ wp search-replace 'foo' 'bar' wp_posts wp_postmeta wp_terms --dry-run
$ wp search-replace '[foo id="([0-9]+)"' '[bar id="1"' --regex --regex-flags='i'
$ wp search-replace --url=example.com example.com example.test 'wp_*options' wp_blogs wp_site --network
$ wp search-replace foo bar --export=database.sql
#!/bin/bash
if $(wp --url=http://example.com core is-installed --network); then
wp search-replace --url=http://example.com 'http://example.com' 'http://example.test' --recurse-objects --network --skip-columns=guid --skip-tables=wp_users
else
wp search-replace 'http://example.com' 'http://example.test' --recurse-objects --skip-columns=guid --skip-tables=wp_users
fi