【问题标题】:Bash grep variable as an expressionBash grep 变量作为表达式
【发布时间】:2015-04-07 04:34:18
【问题描述】:

我对 bash 有疑问。我有很大的日志文件,我必须只检查所有日志的一部分。为此,我使用了这些表达方式:

cat 29.log | grep -A 999 "15/02/06-22:30"

awk '$1>="15/02/06-22:30" {print$0}' 29.log

我想将"15/02/06-22:30" 更改为"date +%y/%m/d-%H:M" 但是当我使用命令时

awk '$1>="date +%y/%m/d-%H:M" {print$0}' 29.log

awk '$1>='date +%y/%m/d-%H:M' {print$0}' 29.log

什么都没有发生。 有任何想法吗? 我需要一个命令,而不是脚本

【问题讨论】:

  • 为什么不能是脚本?
  • 您想要文字字符串"date +%y/%m/d-%H:M" 还是命令date '+%y/%m/d-%H:M' 的输出?您可以通过 $(date '+%y/%m/d-%H:M') 语法将后者替换为您的命令。
  • 为什么不能是脚本?因为我把这个命令放在测试自动化程序中,更难使用脚本。

标签: bash variables awk grep expression


【解决方案1】:

您可以使用 -v 标志将 shell 变量传递给 AWK:

awk -v d="$(date '+%y/%m/%d-%H:%M')" '$1>=d' 29.log

【讨论】:

  • 但我还有一个问题。如果我想早点将此日期保存在文件中(date.txt)并稍后执行 awk 命令并使用 date.txt 之类的参数怎么办。
  • @DamianSilkowski:使用:-v d="$(< date.txt)"。 HTH。
  • man awk 很烂。我和这个人失去了大约 2 个小时,我找不到那个。非常感谢。
  • @DamianSilkowski:很遗憾听到这个消息。如果它让你感觉更好,那它实际上是你的 shell 的一个特性——与 AWK 无关。看看I/O redirectionparameter substitution。 HTH。
【解决方案2】:
 grep -A 999 `date '+%y/%m/d-%H:M'` 29.log

【讨论】:

  • 它也可以,但我更喜欢 awk 而不是 grep。但你的暗示很好。谢谢。
猜你喜欢
  • 2018-04-16
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2011-07-05
  • 2023-03-04
相关资源
最近更新 更多