問題描述
需要對一個較大的檔案進行處理,刪除每一行中符合的字串之前的內容。文件內容格式如下:
aaa dd kk segmentfault=1098-0987-3jlc ok=okj hello=0cvqa
12jk od=kk segmentfault=1jj8-lk87-oplc suiji=che shachu=keng
pppp=dd bbo;=9as segmentfault=0876-oj87-3pac zifu=ka neirong=xia
期望能夠刪除每行第一次出現 segmentfault 之前的內容至行首,期望處理的結果如下
segmentfault=1098-0987-3jlc ok=okj hello=0cvqa
segmentfault=1jj8-lk87-oplc suiji=che shachu=keng
segmentfault=0876-oj87-3pac zifu=ka neirong=xia
目前方案
使用巨集來執行
qa ---开启宏录制
/resourceId ---随意操作
d0 ---随意操作,删除至行首
j ---随意操作,跳转到下一行
q ---退出宏
1000000@a ---执行1000000次
缺點:效率低下,極度耗時
期望方案
期望直接列編輯(ctrl + v)之後進行 刪除每行匹配位置至行首 的操作。
該如何實現?
試試正規替換吧,列編輯,你的關鍵字位置不一樣,直接列編輯不了
@ixx 思路是對的,正規表示式
不過有更簡單的方案
ze
標記匹配模式結束我猜問題作者是想使用vim的列模式(Ctrl-v)然後多行選擇,匹配選擇到segment單字之前的部分。
但是不行,因為做不到
1)列模式下匹配做得比較好的是到行首或者行尾,形成不規則的匹配塊;其他的位置不行。
2)第一行從行首到segment的s是3個W,而2行和3行到segment的s是2個W,這個不好一次性弄的。 (同理W換w也不行)
列模式下,比較適合處理的前提是,文字排列比較整齊或是能方便統一定位的。
==========
另一個答案說的用正規表示式來匹配替換的很好用。