如果在一行中间找到换行符,则VIM搜索并插入换行符

时间:2014-01-04 04:09:19

标签: regex vim

这让我疯了一会儿。实际上,让那个该死的夜晚!

我有一个联系信息文件,现在只是稍微破坏了我正在尝试修复VIM。该文件有13k行,所以我真的,真的不想在文件中手动修复它。我相信我遇到的最后一个问题是,由于某些愚蠢的原因,许多行与下一行一起运行。这是一个csv文件,其中换行符分隔行。不幸的是,可能有几百行,其中有一行换行符应该是两行。

以下是发生这种情况的文件示例:

Freddy,Bauhof,fabaof@garbage.net,16126 Garbage Drive,Spring,TX,77      379,5555550440,M,1/1/14,14:23:57,256.241.24.29^@
Natasha,Moore,ndivy@garbage.com,3715 Garbage Rd,Louisville,KY,40218,5555553358,F,1/1/14,3:12:09,74.256.182.12^@MaryAnn,Haase,mahase@garbage.net,303 N       Garbage Rd,Norfolk,NE,68701,5555559031,M,12/31/13,7:20:21,69.256.211.147^@
Jonathan,Golden,jongolden@garbage.com,11 Garbage Dr,GlenHead,NY,115      45,5555556712,M,1/1/14,17:28:09,256.195.83.118^@

我要做的只是插入换行符/ carraige返回/在“12 ^ @”之后和“MaryAnn”之前实际将中间行分成两行的任何内容。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

在vim :%s/\^@\(\S\)/^@\r\1/g中运行此功能。

它在^@之间插入回车符

Foo^@
Bar^@Baz^@
Qux^@

变为

Foo^@
Bar^@
Baz^@
Qux^@

答案 1 :(得分:1)

vim

这条线可行:

%s/\^@\zs\ze\S/\r/g

如果你对shell开放, grep 可以帮助你:

kent$  cat f
foo^@
foo2^@bar^@baz^@
blah^@

kent$  grep -oP '.*?\^@' f    
foo^@
foo2^@
bar^@
baz^@
blah^@

sed

kent$  sed -r 's/\^@(.)/^@\n\1/g' f
foo^@
foo2^@
bar^@
baz^@
blah^@