jav*_*717 3 regex vim join flat-file
我有一个txt文件,其中包含企业的联系信息.目前,每行包含业务的不同数据.我正在尝试构建一个管道分隔文件,其中包含单行上每个业务的所有信息.问题在于每个企业都有不同数量的生产线.所以文件看起来像这样:
Awesome Company Inc|
Joe Smith, Owner|
Jack Smith, Manager|
Phone: (555)456-2349|
Fax: (555)456-9304|
Website: www.awesomecompanyinc.com [HYPERLINK: http://www.awesomecompanyinc.com]|
* Really Cool Company|
* Line of business: Awesomesauce|
Killer Products LLC|
Jack Black, Prop|
Phone: (555)234-4321|
Fax: (555)912-1234|
1234 Killer Street, 1st Floor|
Houston, TX 77081|
* Apparel for the classy assassin|
* Fearful Sunglasses|
* Member of the National Guild of Killers since 2001|
* Line of business: Fuhgettaboutit|
Run Code Online (Sandbox Code Playgroud)
等等
所以我可以:g/<pattern>/j用来连接一个模式中的行,但是我在弄清楚模式应该是什么时遇到了麻烦.在上面的示例中,第1-9行需要连接,然后第10-19行.
关键是以2个空格和星号开头的行:
* Line of business
Run Code Online (Sandbox Code Playgroud)
模式基本上应该说:"从以字母开头的第一行开始,连接所有行,直到最后一行开头后的第一行\ \ \*\,然后重复直到文件结尾."
我怎么写这个?我是否应该分两步完成 - 也就是说,有没有办法首先加入以字母开头的所有行,然后是所有行开头\ \ \*\,然后加入每个结果对?
从以字母开头的第一行开始,连接所有行,直到最后一行开头后的第一行\ \ *\,然后重复直到文件结尾.
你实际上几乎可以将它翻译成Vimscript:
/^\a/*是/^ \* .*\n\a:找到以bullet(^ \*)开头的行,匹配行的其余部分(.*),并声明下一行不是项目符号(\n\a):global合在一起:
:global/^\a/,/^ \* .*\n\a/join
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |