如何在 shell 脚本中提取从时间戳到文件末尾的日志
How to extract logs from a timestamp till the end of the file in shell script
我想从日志文件中提取日志,假设文件名为 todayslog.log
我的日志格式如下:
[12/21/16 4:21:00:083 MST] blah blah 1
[12/21/16 4:22:00:102 MST] blah blah 2
[12/21/16 4:23:00:128 MST] blah blah 3
我想提取从第一次出现“12/21/16 4:21:00:083 MST”到文件末尾的日志。
我尝试了以下代码,但由于我的日期中存在“/”,所以无法正常工作。
sed -e '/12/21/16 1:30:54:663/,$p' todayslog.log
sed -n '/12/21/16 4:21:00:028/,/12/21/16 4:21:00:128/p' todayslog.log
我会使用以下技巧
$ cat 41265401 # this is my file with data
[12/21/16 4:21:00:083 MST] blah blah 1
[12/21/16 4:22:00:102 MST] blah blah 2
[12/21/16 4:23:00:128 MST] blah blah 3
[12/21/16 6:24:00:128 MST] blah blah 6
[12/21/16 8:29:00:101 MST] blah blah 8
bla bla
bla bla
$ cat 41265401.sh
#!/bin/bash
find_me="12/21/16 4:23:00:128 MST" # you can also pass the string as argument
start_pos=$(grep -nm1 "$find_me" 41265401)
start_pos=${start_pos%%:*} # Shell param expansion, see [1]
awk -v start_pos="$start_pos" 'FNR>=start_pos' 41265401 > result
$ ./41265401.sh # script in action
$ cat result # from first match till end
[12/21/16 4:23:00:128 MST] blah blah 3
[12/21/16 6:24:00:128 MST] blah blah 6
[12/21/16 8:29:00:101 MST] blah blah 8
bla bla
bla bla
参考资料
[1] : Shell Param expansion
还有 dategrep,一个可以按日期过滤条目的小工具。
类似于:
dategrep --start "12/21/16 4:21:00" --format "%x %X" todayslog.log
这里 sed
有:
sed -n '/12\/21\/16 4:21:00:083 MST/ {:end; p; n; b end}'
我想从日志文件中提取日志,假设文件名为 todayslog.log
我的日志格式如下:
[12/21/16 4:21:00:083 MST] blah blah 1
[12/21/16 4:22:00:102 MST] blah blah 2
[12/21/16 4:23:00:128 MST] blah blah 3
我想提取从第一次出现“12/21/16 4:21:00:083 MST”到文件末尾的日志。
我尝试了以下代码,但由于我的日期中存在“/”,所以无法正常工作。
sed -e '/12/21/16 1:30:54:663/,$p' todayslog.log
sed -n '/12/21/16 4:21:00:028/,/12/21/16 4:21:00:128/p' todayslog.log
我会使用以下技巧
$ cat 41265401 # this is my file with data
[12/21/16 4:21:00:083 MST] blah blah 1
[12/21/16 4:22:00:102 MST] blah blah 2
[12/21/16 4:23:00:128 MST] blah blah 3
[12/21/16 6:24:00:128 MST] blah blah 6
[12/21/16 8:29:00:101 MST] blah blah 8
bla bla
bla bla
$ cat 41265401.sh
#!/bin/bash
find_me="12/21/16 4:23:00:128 MST" # you can also pass the string as argument
start_pos=$(grep -nm1 "$find_me" 41265401)
start_pos=${start_pos%%:*} # Shell param expansion, see [1]
awk -v start_pos="$start_pos" 'FNR>=start_pos' 41265401 > result
$ ./41265401.sh # script in action
$ cat result # from first match till end
[12/21/16 4:23:00:128 MST] blah blah 3
[12/21/16 6:24:00:128 MST] blah blah 6
[12/21/16 8:29:00:101 MST] blah blah 8
bla bla
bla bla
参考资料
[1] : Shell Param expansion
还有 dategrep,一个可以按日期过滤条目的小工具。 类似于:
dategrep --start "12/21/16 4:21:00" --format "%x %X" todayslog.log
这里 sed
有:
sed -n '/12\/21\/16 4:21:00:083 MST/ {:end; p; n; b end}'