我正在尝试使用wp cli(带regex)进行搜索和替换。
I want to change:
领域com/wp-content/uploads/2020/04/asdnbahsdjhgzw/picture。jpg公司
到
领域com/wp-content/uploads/2020/04/picture。jpg公司
所以,我想摆脱“我想摆脱”这个词;asdnbahsdjhgzw;零件
Now I tried something like:
wp search-replace "domain.com/wp-content/uploads/(\\d)/(\\d)/(\\d*)/" "domain.com/wp-content/uploads/\\$1/\\$2/" --precise --all-tables --skip-columns=guid --regex
匹配和;捕获“;媒体的目录结构,我想我可以用/$1/$2/替换它们
(\\d*)/将捕获随机目录名asdnbahsdjhgzw/,并且在替换时不回调它BUT
不幸的是,这并没有如我所希望的那样奏效。我得到以下错误:
syntax error near unexpected token `(\'
我还在(
/\\(\\d\\)/\\(\\d\\)/\\(\\d*\\)/
但运气不好。
也许有人知道可能是什么问题,但我不知道WP CLI;)
谢谢
SO网友:Pat J
而不是使用"
要包装表达式,请使用\'
.
进一步的实验表明,这是不正确的"
和\'
应该有效,只要它们匹配(即,你不会意外尝试wp search-replace "domain.com/wp-content/uploads/(\\d)/(\\d)/(\\d*)/\' "domain.com/wp-content/uploads/\\$1/\\$2/" --precise --all-tables --skip-columns=guid --regex
. (注意,该示例中的正则表达式以"
并以结束\'
.)
我不会删除这个答案,因为下面关于regex本身的信息仍然有效。
正则表达式在我看来是错误的。\\d
将匹配单个数字,因此它将匹配,例如,1
, 5
, 等等,但不是2020
或04
.
我推荐如下:
wp search-replace
--dry-run
\'domain.com/wp-content/uploads/(\\d+)/(\\d+)/[^/]+/\'
\'domain.com/wp-content/uploads/\\$1/\\$2/\'
--precise --all-tables --skip-columns=guid --regex
(为了便于阅读,增加了换行符;所有这些都应该放在一行上)
这个[^/]+
将匹配所有内容,但/
正则表达式搜索的最后一段中的字符。我还取出了()
既然你要丢弃它,就把它包装起来。
我还强烈建议使用--dry-run
与的参数wp search-replace
首先,看看你要替换什么。
Edited again to add: 我已经删除了关于我更深入地使用\'
vs。"
在里面bash
, 因为这似乎是不正确的。