我道歉,因为这是一个noob s //问题,但我对不同应用程序/工具的操作不一致感到沮丧。我对这些差异知之甚少。我已经研究过并查看了以下链接的主题,并且已经将我的头撞在墙上好几个小时了。
Perl - remove carriage return and append next line
问题在于我是数据清理(boo),我相信我找到了一个通用的解决方案,将7+ s操作减少到一个。但是当它在notepad ++和这个在线工具regex101.com中工作时,我无法通过命令行使操作工作。
以下是一些类似的数据:
1429,12/6/2016,11:07:24 AM,T,527:472,281,2,176,-,205,Error,[CR][LF]
[CR][LF]
anchorstring::anchorstring2 message payload[CR][LF]
important data here =999, source=001, xyz=687[CR][LF]
1430,12/6/2016,11:07:24 AM,T,527:472,281,11,1844,-,81,Message,writing data[CR][LF]
我添加了[CR] [LF]因为使用记事本++我可以看到它们。我无法通过命令行perl表达式删除它们。
显然,不以数字开头的三条线是需要被拉回到第1429行的坏线。
我试过了:
perl -p0e "s/(\cM\cJ)?\cM\cJ(^[^\d].+)/\2 /g" output.csv > output2.csv
perl -p0e "s/(\r\n)?\r\n(^[^\d].+)/\2 /g" output.csv > output2.csv
sed -r s/"\r\n(^[^\d].+)"/"\1 "/g output.csv > output2.csv
perl -p0e "s/\n(^[^\d]+.+)/\1 /g" output.csv > output2.csv
ad adause ...
令人沮丧的是,当我在notepad ++中使用正则表达式查找和替换运算符并且regex101工具说它应该找到并替换它时,它会起作用。
perl -p00e "s/(,Error,)\n\n/\1/g" output.csv > output2.csv
努力摆脱CRLF,但是锚定为“错误”而不是所有的分裂都有。
非常感谢任何帮助。
谢谢。
答案 0 :(得分:0)
试着去除所有分裂。
perl -p0777e "s/\n\n?([^0-9])/ \1/g" output.csv > output2.csv