【发布时间】:2016-02-26 00:35:15
【问题描述】:
一直在尝试使用awk 及其gensub() 来匹配不在行首的模式,并在第一部分和匹配项之间插入换行符。
模式是匹配 MM/DD HH:MM:SS。
我的脚本splitatdate.awk:
#!/usr/bin/awk -f
{
if ( /.+[0-9][0-9][/][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] / ) {
print gensub(/^\(.+\)\([0-9][0-9][/][0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9] \)/,"\\1\n\\2", "g")
}
}
我的测试输入break-me.txt,其中包含我拥有的线型样本:
11/25 08:06:30 good text follows here
rs = ['yada yada11/25 08:07:41 more interesting stuff
rs = ['things with data: tag value
rs = ['yada yada data: 11/25 08:07:43 even more interesting stuff
我在 bash 中运行时得到的结果:splitatdate.awk break-me.txt 是:
rs = ['yada yada11/25 08:07:41 more interesting stuff
rs = ['yada yada data: 11/25 08:07:41 even more interesting stuff
匹配正确的行(那些不以日期开头的行)但没有插入新行,或者据我所知,做任何替换。
我想我会得到什么:
rs = ['yada yada
11/25 08:07:41 more interesting stuff
rs = ['yada yada data:
11/25 08:07:41 even more interesting stuff
完整的任务是按原样回显每一行,但用换行符分割那些日期字符串不在开头的行。但我需要了解为什么这部分不起作用。如果有人有更好的工具,我不会挂断使用 awk,但想知道我做错了什么。
这是在带有 GNU awk 3.1.7 的 RHEL 6 上。
编辑:此脚本的答案:在 gensub() 内的捕获分组括号之前去掉反斜杠。
【问题讨论】: