周五晚上,研发同事突然发现线上环境中的客户数据出现异常,对于redis中的resource_info中的部分field需要进行删除。
当看到研发同事一个一个进行删除的时候,与他们进行讨论,为啥要一个一个删呢,可以写个脚本进行删除呢。
问同事要来了json文件,而需要删除的field是其中的一个字段。
整理好后,通过vim打开文件并将开头结尾的引号以及结尾的分号删除掉,然后使用命令和管道
cat xx.txt | xargs -i redis-cli -c -h xxx -p port -a password HDEL resource_info {}
没想到报了一堆0
时间紧,于是打开xx.txt,在每行开头加入命令resis-cli -c -h ...
没想到还是报错
难道是执行太快了,于是在每行命令结尾加上;sleep 2
没想到redis命令返回了1,但是报了其他的错误
需求满足了,但是为啥报错呢?
后来想了下,原来同事是在windows里面生成的json文件,这个文件每行结尾是\r\n
,而在linux里面会把\n
作为结尾,\r
也会当做命令字符一并加入到字符串中,也就是为啥报sleep: 无效的时间间隔"2\r"
,也是为啥开始使用cat 和 xargs并用管道连接的时候报错了。