我想跟踪一个格式类似于

Mar 22 23:26:18.793031 localhost my_process[1123]: (my_id) contents of actual log output
Mar 22 23:26:18.946769 localhost my_process[1123]: (my_id) more singe line contents
Mar 22 23:26:18.955423 localhost my_process[1123]: (my_id)
****
* this log statement has a bunch of lines
****

我想把这些线剪下很多垃圾,这样就不会太长了。但是,我只想剪掉以日期等开头的行,而不去理会其他行。它应该看起来像:
23:26:18 my_process[1123]: contents of actual log output
23:26:18 my_process[1123]: more singe line contents
23:26:18 my_process[1123]:
****
* this log statement has a bunch of lines
****

这是我要去的管道,但它切断了所有的管道。
# first cut out the unwanted fields
# then cut out the unwanted decimal part of the timestamp
tail -f mylog.txt | cut -d " " -f 3,5,7- | cut -c 1-8,16-

有没有一种方法可以让我寻找那些不以普通日期模式开头的行,而只是让那些行通过未处理的行?
谢谢

最佳答案

你可以用这样的锥子:

awk '/ [0-9]{2}:[0-9]{2}:[0-9]{2}/{
   split($0, a, /: \([^)]+\) /)
   sub(/\.[0-9]+/, "", $3)
   print $3, $5, a[2]
   next
} 1' file.log

23:26:18 my_process[1123]: contents of actual log output
23:26:18 my_process[1123]: more singe line contents
23:26:18 my_process[1123]:
****
* this log statement has a bunch of lines
****

/ [0-9]{2}:[0-9]{2}:[0-9]{2}/将搜索输入行中带有hh:mm:ss的特定模式,并仅解析这些行。其余行将按原样打印。

10-07 12:49