找到分割线并删除它们之间的CRLF

时间:2016-12-21 05:15:09

标签: perl replace sed

我道歉,因为这是一个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,但是锚定为“错误”而不是所有的分裂都有。

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

试着去除所有分裂。

perl -p0777e "s/\n\n?([^0-9])/ \1/g" output.csv > output2.csv