当前位置:  开发笔记 > 开发工具 > 正文

如何创建VIM或Vi命令以删除文本文件中每一行的特定字符后的所有文本?

如何解决《如何创建VIM或Vi命令以删除文本文件中每一行的特定字符后的所有文本?》经验,为你挑选了3个好方法。

场景:

我有一个文本文件,其中包含管道(如|字符中)分隔的数据.

管道分隔字段中的每个数据字段可以是可变长度的,因此计数字符将不起作用(或使用某种子字符串函数......如果它甚至存在于Vim中).

是否有可能使用Vim/Vi将第二个管道中的所有数据删除到整个文件的行尾?有大约150,000行,所以手动这样做只会吸引受虐狂......

例如

更改以下行:

1111|random sized text 12345|more random data la la la|1111|abcde
2222|random sized text abcdefghijk|la la la la|2222|defgh
3333|random sized text|more random data|33333|ijklmnop

至:

1111|random sized text 12345
2222|random sized text abcdefghijk
3333|random sized text

我确信这可以以某种方式完成......我希望.

TIA

更新:我应该提到我在Windows XP上运行它,所以我无法访问一些提到的*nix命令(在Windows上无法识别CUT).



1> Brian Carper..:
:%s/^\v([^|]+\|[^|]+)\|.*$/\1/


为正则表达式打开"非常神奇"的模式.它可以让你避免反斜杠 - 逃避parens和pluses等等.见:h /\v

2> CMS..:

您还可以录制宏:

qq02f|Djq

然后你就可以用100 @ q播放它来在接下来的100行上运行宏.

宏观解释:

qq - 开始宏录制

0 - 转到该行的第一个字符

2F | - 找到第二次出现的| 在线上的字符

D - 将当前位置后的文本删除到行尾

j - 转到下一行

q - 结束宏录制



3> Paul Tomblin..:

如果你不必使用vim,另一种选择是unix"cut"命令.

cut -d '|' -f 1-2 file > out.file

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有