我正在尝试清理一个文件,该文件似乎没有在新行中写入每个新的日志条目。有些条目最终被附加到前一行的末尾。这使得当我试图使用grep/awk等来分析和获得正确的计数/数据时变得困难…
这就是每一行/条目的样子——注意,我已经替换了日志条目的实际内容,但基本上每个条目都以相同的字符串开始,以相同的模式结束,ID/字符串后面跟着一个数字,例如";ID:20";。
图案:
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: ##
(请注意,ID后面的数字对于每个条目并不总是相同的(
发生的情况是,文件的某些行最终在同一行上有两个条目:
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 33
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 20INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 55
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 20
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 27INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 14
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 35INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 22
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 10
我想做的是在上面的第二行;ID:##";以及";INFO";我的文件中受影响的所有行。
我可以通过grep "ID: [0-9]*INFO" mylog.log
清除发生这种情况的所有链接
和尝试了许多sed命令,但似乎不知道如何在数字[0-9]*和INFO之间偷偷插入新行"\n"。。。
感谢您的帮助。
给定发布的示例输入/输出,您所需要的只是使用一个具有-E
的sed来启用ERE并在替换文本中支持n
;换行符";(例如GNU和OSX/BSD seds(:
$ sed -E 's/([0-9]+)INFO/1nINFO/g' file
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 33
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 20
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: ##
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 20
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 27
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: ##
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 35
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 22
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 10
或者在每个Unix盒子上的任何shell中使用任何sed:
sed 's/([0-9][0-9]*)INFO/1
INFO/g' file
如果这对你不起作用,那么修复你的例子,将不起作用的情况包括在内。
使用grep
可以执行以下操作:
grep -Eo 'INFO:[[:blank:]].*?ID:[[:blank:]][0-9]+' file
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 33
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 20
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 55
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 20
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 27
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 14
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 35
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 22
INFO: DATA: ## DATA2 ## DATA3: ##.### DATA4: ## ID: 10
一个懒惰的方法是,每当您注意到"INFO";不在最左边的位置,然后将其管道传输到regex模式检查器,以确保它符合DATA。。。DATA4账单。