【发布时间】:2014-11-21 03:21:28
【问题描述】:
嗨,我有一个命令,我一直在用它来处理 vim 中的文本文件;寻找一个字符串 R1 然后删除 3 行,2 行低于该字符串。 这在 vim 中运行良好,但是对于大文件来说非常慢:
:1,$s/\(r1.*\n\)\(\(.*\n\){2}\)\(\(.*\n\)\{3}\)/\1\2/g
例子:
R1 30049 109769 109769
101598 281921
6.56608e+006 2.82861e+006
1.19658e+006 1.19658e+006
-515145 -515145
-223257 627520
-101598 -281921
-6.56608e+006 -2.82861e+006
23.125 23.125
271.7 272.46
500 500
会变成:
R1 30049 109769 109769
101598 281921
6.56608e+006 2.82861e+006
-101598 -281921
-6.56608e+006 -2.82861e+006
23.125 23.125
271.7 272.46
500 500
此命令(或类似命令)能否更快地在 unix 终端中的 sed 或 awk 中运行?
非常感谢
【问题讨论】:
-
:g/R1/.+3,.+5d中的vim有什么问题(而不是恶魔般的正则表达式)?我相信这应该相当快。