删除带空格的键

Delete keys with spaces

我正在尝试使用以下命令从我的远程 Redis 数据库中删除多个密钥。

redis-cli -h <host> -p 6379 KEYS "myprefix:*" | xargs redis-cli -h <host> -p 6379 DEL

它已经删除了所有匹配的键,除了其中有空格的键。

例如

已删除:

未删除:

我的查询模式应该是什么,以便这些也被删除?我尝试使用谷歌搜索,但无法找到任何解决方案。

问题出在 xargs,而不是您的 KEYS 查询。如果您 运行 您的查询,您会注意到它正确 returns 带有空格的键。问题是默认情况下 xargs 将通过空格和换行符传送到其中的字符串拆分。要更改此行为以使其仅以换行符分隔,请添加 -d "\n" 选项。例如:

redis-cli -h <host> -p 6379 keys "myprefix:*" | xargs -d "\n" redis-cli -h <host> -p 6379 del

对于使用 Mac OS xargs (BSD) 而不是 linux (GNU) xargs 的任何人,以下作品

redis-cli -h <host> -p 6379 keys "myprefix:*" | xargs -I% redis-cli -h <host> -p 6379 del %

或者对于其他怪异的字符,如语音标记,这有效

redis-cli -h <host> -p 6379 --scan --pattern "myprefix:*" | tr '\n' '[=11=]' | xargs -0 -I% redis-cli -h <host> -p 6379 del %

这是另一个让它在 Mac 上工作的技巧。

redis-cli KEYS 'pattern*' | xargs -0 -n1 'echo' | sed "s/^/'/g" | sed "s/$/'/g" | xargs redis-cli DEL

这基本上是在传递给 redis-cli DEL

之前在您的密钥周围加上引号