WP CLI:搜索并替换URL的特定目录名

时间:2021-11-08 作者:Elv1s

我正在尝试使用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;)

    谢谢

    1 个回复
    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, 等等,但不是202004.

    我推荐如下:

    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, 因为这似乎是不正确的。

    相关推荐

    如果没有--Allow-Root,我如何使用WP-CLI命令

    我想在putty WordPress 5.5.1中使用WP-CLI命令;Ubuntu 20.04 Droplet,但“当我在不使用–allow root的情况下使用Wp命令时,它会显示您作为root用户访问时出现的错误”,我知道使用–allow root是不安全的。请任何人都可以帮助我在我的Putty中访问wp命令而不使用–allow root。