我正在尝试使用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, 因为这似乎是不正确的。