如何使用vim文本编辑器删除文本文件中出现的任何非法新行?

时间:2014-03-10 19:59:08

标签: mysql vim replace

我正在尝试修复数据文件,以便我可以使用MySQL DATA LOAD INFILE将数据导入数据库。

我对该文件的问题是文本很长,但文本中包含一个新行。新行也意味着新记录。这使我很难将记录导入MySQL。

如何在linux中使用vim搜索非法的新行并用空格替换它们?

非法新行:如果在逗号(,)和(,012d000)之间找到新行

这是文件

的示例数据
VST-65654,a0Jd000000FM8cBEAT,Blah,2013-10-22 10:46:30.000000,Blah Blah,2014-01-20 20:27:42.000000,2013-10-18 14:00:00.000000,005d0000002biR4AAI,001d000001NEh0oAAD,In Person,Unscheduled,Grow Applications,High,this is the body

of this 
log test
where I need to

remove all extra new lines,012d0000000ppiXAAQ
VST-122549,a0Jd000000GVwtyEAD,Blah,2013-10-31 18:17:50.000000,Blah,2013-11-06 18:07:47.000000,2013-10-31 18:10:00.000000,005d0000002biR9AAI,001d000001NEaQgAAL,In Person,Scheduled,Grow Applications,Medium,One more long paragraph

where I need to remove all extra

new lines

,012d0000000ppiABCD

字段用逗号(,)分隔,新记录应在找到新行\ n时开始。如何进行此类搜索替换以解决此问题?

或者如何用双引号替换所有未转义的逗号?也就是说,如果我找到\,请不要触摸它,但是如果你发现逗号用“,”替换它,

由于

3 个答案:

答案 0 :(得分:2)

g/^VST/,-/,012d000/j!

使用全局命令:g连接:j,以VST开头的行,以及012d000的下一个实例中的所有行。

如需更多帮助,请参阅:

:h :g
:h :j
:h [range]

答案 1 :(得分:1)

我的正则表达式foo不够强大,无法在单个命令中执行此操作,但您可以创建一个宏来实现您想要的效果。以下内容适用于您提供的输入

转到文件开头

gg

开始录制

qq

查找下一个,012d

/,012d<CR>

上一行

k

进入视觉模式

v

转到上一个逗号

?,<CR>

替换所有新行号

:s/\n//g<CR>

向下一行

j

完成录制

q

重复

@q

结果

VST-65654,a0Jd000000FM8cBEAT,Blah,2013-10-22 10:46:30.000000,Blah Blah,2014-01-20 20:27:42.000000,2013-10-18 14:00:00.000000,005d0000002biR4AAI,001d000001NEh0oAAD,In Person,Unscheduled,Grow Applications,High,this is the body of this log test where I need to remove all extra new lines,012d0000000ppiXAAQ
VST-122549,a0Jd000000GVwtyEAD,Blah,2013-10-31 18:17:50.000000,Blah,2013-11-06 18:07:47.000000,2013-10-31 18:10:00.000000,005d0000002biR9AAI,001d000001NEaQgAAL,In Person,Scheduled,Grow Applications,Medium,One more long paragraph where I need to remove all extra new lines ,012d0000000ppiABCD

答案 2 :(得分:0)

我喜欢@Peter Rincker的回答。至于您最后提出的问题,您可以使用

将所有未转义的逗号替换为","
:%s/\\\@<!,/","/g

此处,\\表示字面反斜杠,\@<!表示修饰符。 (见:help /\@<!。)

此解决方案的问题在于您未正确定义未转义的逗号是什么。例如,\\,是转义后的反斜杠,后跟未转义的逗号。我相信/\\\@<!\%(\\\\\)*\zs,/是正确的模式,但我并不认为它很漂亮。如果你使用“非常神奇”的版本,它会好一点:/\v\\@<!%(\\\\)*\zs,/