删除带空格的键

时间:2018-06-12 11:50:46

标签: redis redis-cli

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

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

删除了所有匹配的键,除了包含空格的键。

例如

删除:

  • myprefix:ABC
  • myprefix:DEF
  • myprefix:GHI

未删除:

  • myprefix:jkl mno
  • myprefix:pqr stu
  • myprefix:vwx yza

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

3 个答案:

答案 0 :(得分:7)

问题在于xargs,而不是您的KEYS查询。如果运行查询,您会注意到它正确返回了带有空格的键。问题是默认情况下,xargs将空格和换行符串行传输到其中。要更改此行为以便仅按换行符分隔,请添加 -d&#34; \ n&#34; 选项。例如:

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

答案 1 :(得分:0)

对于使用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' '\0' | xargs -0 -I% redis-cli -h <host> -p 6379 del %

答案 2 :(得分:0)

这是另一个使其可以在Mac上运行的黑客。

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

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

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