我有一个grep命令,我每天运行以在巨大的日志文件中查找条目。
此命令在我们的开发环境中正常工作。但是在我们的生产环境中,它输出的响应与日志文件中的条目不同。
这是命令:
logentry=$(grep -m1 -oP '.*(?<=Reset\s).*' $log)
日志文件中的实际条目:
******Reset Counter:[Total:1849766] [Success:1849766] [Insert:102] [Update:1848861] [Delete:803] [Key:0]
命令输出:
******Reset Counter:[Total:1849766] 1 [Insert:102] [Update:1848861] [Delete:803] [Key:0]
预期产出:
******Reset Counter:[Total:1849766] [Success:1849766] [Insert:102] [Update:1848861] [Delete:803] [Key:0]
grep命令的这种不一致行为背后的原因是什么?
答案 0 :(得分:0)
感谢@Ed Morton的评论。修复工作正常。
根本原因:
该变量未被引用,因此它对全局,单词拆分和文件名扩展开放,因此最终结果将取决于目录中的文件。
解决方案:使用echo“$ logentry”代替并总是引用你的shell变量,除非你有一个特定的目的,不这样做并完全理解所有的含义。
Security implications of forgetting to quote a variable in bash/POSIX shells