场景:
我有一个文本文件,其中包含管道(如|
字符中)分隔的数据.
管道分隔字段中的每个数据字段可以是可变长度的,因此计数字符将不起作用(或使用某种子字符串函数......如果它甚至存在于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).
:%s/^\v([^|]+\|[^|]+)\|.*$/\1/
您还可以录制宏:
qq02f|Djq
然后你就可以用100 @ q播放它来在接下来的100行上运行宏.
宏观解释:
qq - 开始宏录制
0 - 转到该行的第一个字符
2F | - 找到第二次出现的| 在线上的字符
D - 将当前位置后的文本删除到行尾
j - 转到下一行
q - 结束宏录制
如果你不必使用vim,另一种选择是unix"cut"命令.
cut -d '|' -f 1-2 file > out.file