0

我有一个每天运行的 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 命令的这种不一致行为背后的原因可能是什么?

4

1 回答 1

0

感谢@Ed Morton 的评论。修复工作正常。
根本原因:该变量没有被引用,因此它对通配符、分词和文件名扩展开放,因此最终结果将取决于目录中的文件。

解决方案:改为使用 echo "$logentry" 并始终引用您的 shell 变量,除非您有特定目的而不这样做并且完全理解所有含义。

忘记在 bash/POSIX shell 中引用变量的安全隐患

于 2016-02-28T05:55:20.197 回答