gpt4 book ai didi

regex - 如何grep以数字或空格开头的行

转载 作者:行者123 更新时间:2023-12-03 19:58:18 25 4
gpt4 key购买 nike

我需要在我的日志文件中计算每小时的消息数。每个日志文件行前面都有时间戳。因此,我使用以下“for”和“grep”命令来执行此操作-

for i in `seq 0 23`
do egrep "$i:[0-9][0-9]:[0-9][0-9] <some_pattern>" filename | wc -l
done

这将为我提供 0 到 23 的每小时消息数。

但是,这不适用于单位数小时,例如 5:23:32因为它前面有一个空格。那么grep必须是-
egrep " $i:[0-9][0-9]:[0-9][0-9] <some_pattern>" filename | wc -l

如果不是,它将错误地匹配以 15:23:32 开头的行

那么我怎么能告诉 grep 一个数字前面只能有一个空格或行首。

最佳答案

使用 egrep

for i in `seq 0 23`; do egrep -c "^[[:space:]]*$i:[0-9][0-9]:[0-9][0-9] <some_pattern>" 'filename'; done
^[[:space:]]*$i:[0-9][0-9]:[0-9][0-9]这将告诉 egrep 从行首开始匹配。如果该行以行首的空格开头或仅以您的模式开头,grep 将匹配它。这也将告诉 grep 匹配不要贪婪地匹配。

例如

使用带有模式的命令来查找 5:23:32 ,(其中 $i=5)我们得到
5:23:23
15:23:23

使用上面的命令,我们得到
 5:23:23

grep 带有 -c 选项来计数

你也可以使用 grep 的 -c 选项而不是管道到 wc -l
例子
for i in `seq 0 23`; do egrep -c "^[[:space:]]*$i:[0-9][0-9]:[0-9][0-9] <pattern>" 'filename'; done

关于regex - 如何grep以数字或空格开头的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28419152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com