Redis导入文件时值末尾自动插入换行符,如何避免?
解决Redis导入文件末尾多出换行符的问题
我来帮你搞定这个Redis导入文件时末尾多换行的问题!之前我也踩过类似的坑,其实根源很简单:你用redis-cli -x结合重定向导入文件时,文件末尾的换行符会被一并存入Redis——如果你的/tmp/file.json本身末尾带有换行,或者重定向操作把换行也读进去了,就会出现你看到的多余换行。
下面给你几个实用的解决方案,按需选择:
方案1:截断文件最后一个字节(适合无内部换行的JSON文件)
如果你的JSON文件本身没有换行(就像你示例里的压缩格式),直接用head -c -1去掉最后一个字符(也就是末尾的换行符):
head -c -1 /tmp/file.json | redis-cli -p <Port> -h <Host> -n <DB> set <key>
这个命令会流式处理文件,不会把整个文件加载进内存,适合大文件场景。
方案2:保留内部换行,仅去掉末尾换行(适合带格式的JSON文件)
如果你的JSON文件有合法的换行(比如格式化后的结构),可以用awk来只清理最后一行的换行:
awk 'NR>1{print prev} {prev=$0} END{printf "%s", prev}' /tmp/file.json | redis-cli -p <Port> -h <Host> -n <DB> set <key>
它会逐行处理文件,保留中间的换行,最后一行用printf输出(不带自动换行),完美解决末尾多余换行的问题。
方案3:提前清理文件本身的末尾换行
如果你不想每次导入都处理,可以直接修改文件,去掉末尾的换行:
sed -i '$ s/\n$//' /tmp/file.json
之后再用你原来的命令导入就不会有问题了:
redis-cli -p <Port> -h <Host> -n <DB> -x set <key> < /tmp/file.json
验证方法
导入后可以用以下命令检查是否还有多余换行:
# 查看值的最后几个字符 redis-cli -p <Port> -h <Host> -n <DB> GET <key> | tail -c 2 # 或者用十六进制查看最后一个字节(0x0a就是换行符) redis-cli -p <Port> -h <Host> -n <DB> GET <key> | hexdump -C | tail -1
内容的提问来源于stack exchange,提问作者Pankaj Kumar Katiyar
相关产品推荐
相关产品推荐

