以下是数据示例:
2013-06-22 00:00:49.307121|147374 |PHONE HOME|SDRKRKS|REAS|something|KRISTCOS 11:13 AM 6/22/2013
NUM: 90834098
data: 0394884
cX: 90h010f03040f
mR: 034050t0ds0
cNUM: 034050t0ds0
2013-06-22 00:00:49.307121|0950704421406 |PHONE HOME|SDRKRKS|REAS|something|MRS
2013-06-22 00:00:50.379487|0441813679603 |PHONE HOME|SDRKRKS|REAS|something|TN 90210
我需要一个脚本来从不以时间戳开头的行中删除换行符。在上面的示例中,第 2-5 行将附加到文本块中第一行的最后一个字段。我知道如何检测好的线条,
grep '^[0-9][0-9][0-9][0-9].*' testfile
还有坏线,
grep '^[^0-9][^0-9][^0-9][^0-9].*' testfile
现在的问题是,我如何应用它(使用 sed?)以便将“好”行后面的行放回该行的最后一个字段。在这里的任何帮助将不胜感激。
这是所需输出的示例:
2013-06-22 00:00:49.307121|147374 |PHONE HOME|SDRKRKS|REAS|something|KRISTCOS 11:13 AM 6/22/2013 NUM: 90834098 data: 0394884 cX: 90h010f03040f mR: 034050t0ds0 cNUM: 034050t0ds0
2013-06-22 00:00:49.307121|0950704421406 |PHONE HOME|SDRKRKS|REAS|something|MRS
2013-06-22 00:00:50.379487|0441813679603 |PHONE HOME|SDRKRKS|REAS|something|TN 90210
编辑:
对于哪个是最合适的工具存在一些分歧。目前我倾向于记事本++。这与我想做的事情很接近,但它不是很有效,也许有人可以帮我调整它以适应我的用例:
(?! [0-9]{4}\-[0-9]{2}-[0-9]{2}).*
(?! [0-9]{4}\-[0-9]{2}-[0-9]{2}) - searches for a line not like a timestamp
.* - followed by anything else
问题是 .* 捕获了我试图否定的时间戳。有什么想法吗?
编辑2:感谢大家的有用建议,这绝对让我朝着正确的方向前进!以下正则表达式在 notepad++ 中找到有问题的 \n char,但是当我尝试执行替换时,没有任何反应:
Find: (.*)(\n)(?![0-9]{4}\-[0-9]{2}\-[0-9]{2})
Replace: \1
这里有没有人有关于如何强制 notepad++ 删除有问题的 \n 的任何想法?
编辑 3:这是似乎不适用于建议的解决方案的附加示例数据:
2013-06-22 00:00:02.540298|0238704723874 |SMELL TEST|HAKEKJ |REAS|No cooking|tcna / ncc
2013-06-22 00:00:04.302887|3289749873342 |SMELL TEST|ICNIDF |REAS|No cooking|JINUJ/CVGIND/NASR
6:13 AM 6/22/2013
VERIFIED CURLING
TN :- 834974978398
XX and YY updated
THIS IS A SENTENCE
2013-06-22 00:00:06.937545|30874987392838 |SMELL TEST|KCIDKD |REAS|No cooking|SrutiD/cvgind/nasr
tn 4887839847