如何只剪切一些线条,同时保留其他线条未经处理?

时间:2016-03-23 06:52:51

标签: linux bash unix scripting

我想拖尾一个格式类似于

的日志文件
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-

有没有办法可以查找那些不以该常用日期模式开头的行,只是让这些行通过未经处理的行?

由于

1 个答案:

答案 0 :(得分:1)

您可以像这样使用awk:

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的特定模式,并仅解析这些行。其余的行将按原样打印。