删除带空格的键
Delete keys with spaces
我正在尝试使用以下命令从我的远程 Redis 数据库中删除多个密钥。
redis-cli -h <host> -p 6379 KEYS "myprefix:*" | xargs redis-cli -h <host> -p 6379 DEL
它已经删除了所有匹配的键,除了其中有空格的键。
例如
已删除:
- 我的前缀:abc
- myprefix:def
- 我的前缀:ghi
未删除:
- myprefix:jkl mno
- myprefix:pqr stu
- 我的前缀:vwx yza
我的查询模式应该是什么,以便这些也被删除?我尝试使用谷歌搜索,但无法找到任何解决方案。
问题出在 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
之前在您的密钥周围加上引号
我正在尝试使用以下命令从我的远程 Redis 数据库中删除多个密钥。
redis-cli -h <host> -p 6379 KEYS "myprefix:*" | xargs redis-cli -h <host> -p 6379 DEL
它已经删除了所有匹配的键,除了其中有空格的键。
例如
已删除:
- 我的前缀:abc
- myprefix:def
- 我的前缀:ghi
未删除:
- myprefix:jkl mno
- myprefix:pqr stu
- 我的前缀:vwx yza
我的查询模式应该是什么,以便这些也被删除?我尝试使用谷歌搜索,但无法找到任何解决方案。
问题出在 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