【问题标题】:Bash Regex TimeStamp MatchingBash 正则表达式时间戳匹配
【发布时间】:2013-08-06 20:56:26
【问题描述】:

我正在尝试从下午 5 点到凌晨 12 点的日志文件中获取 unix 时间戳。

这是我尝试或当前使用的命令。

cat test.log | grep 130805"(1[7-9]|2[0-3])"????

我想获得如下时间戳:

130805223755 
130805213755 
130805173755

我似乎无法获得正确的模式匹配来获取上面的时间戳。提前请求您的帮助。

【问题讨论】:

  • 您应该在 cmd 行上用单引号包围您的 reg-ex 搜索目标,即 grep '130805(1[7-9]|2[0-3])' test.log.. 如果是,请更新您的问题以显示这一点。附言(您不需要/想要搜索目标中的 dbl-quotes)。祝你好运。
  • 在正则表达式中,. 是任意字符,? 表示前面的字符(或带括号的模式)是可选的。所以把?改成.应该没问题。 (不过,awk 会让你使用 $1 >= 130805170000 && $1 < 13085230000,这样会更容易理解。)
  • @shellter:这些引号没有错。 TIAS。
  • @rici,是的,你是对的。我应该说,“如果你要使用单引号,一定要消除 dbl-quotes,就像我在这个例子中所做的那样”。祝大家好运。

标签: regex bash unix timestamp


【解决方案1】:

我认为引号是错误的,有 ????在引号之外会做shell扩展,不是吗?

这对我有用:

grep -E '130805(1[7-9]|2[0-3])\d\d\d'

【讨论】:

  • Re:“在引号外加上 ???? 会不会进行 shell 扩展?”:是的——文件名扩展——但在 Bash 中,使用典型配置,这种扩展将是除非存在名称匹配的实际文件,否则无操作。所以这是不好的做法,但恕我直言,这里不太可能成为问题。
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 2011-10-17
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多