Unix:使用正则表达式搜索的 grep 命令的意外行为
Unix: Unexpected behavior of grep command with regex search
我有一个 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 命令的这种不一致行为背后的原因可能是什么?
感谢@Ed Morton 的评论。修复工作正常。
根本原因:
该变量未被引用,因此它可以进行通配、分词和文件名扩展,因此最终结果将取决于目录中的文件。
解决方案:改用 echo "$logentry" 并始终引用您的 shell 变量,除非您有特定目的而不这样做并完全理解所有含义。
Security implications of forgetting to quote a variable in bash/POSIX shells
我有一个 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 命令的这种不一致行为背后的原因可能是什么?
感谢@Ed Morton 的评论。修复工作正常。
根本原因:
该变量未被引用,因此它可以进行通配、分词和文件名扩展,因此最终结果将取决于目录中的文件。
解决方案:改用 echo "$logentry" 并始终引用您的 shell 变量,除非您有特定目的而不这样做并完全理解所有含义。
Security implications of forgetting to quote a variable in bash/POSIX shells