需求如下: 輸入文件input.txt:a1a2a3a4b1b2a5b3b4b5 要求輸出文件output.txt為:a1a4b1b2a5b3b5 即去掉第N行,N滿足的條件是:第N行與第N-1、第N+1行的首字母都相同(不去掉首行與末行)。
1 回答

catspeake
TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
vim的正則
%s/\v((.).*\n)((\2.*\n)+)(\2.*$)/\1\5/g
分成三段解釋一下
((.).*\n)
匹配第一行,外層分組用于替換的時(shí)候反向引用,內(nèi)層分組用于后面判斷
((\2.*\n)+)
匹配接下來(lái) 以上一行第一個(gè)字母開(kāi)頭的行(1行或多行)
(\2.*$)
匹配一行以第一行第一個(gè)字母開(kāi)頭的行
最后 \1\5 把上面匹配到的所有的行 替換成第一行和最后一行,即刪除中間的行
注:最開(kāi)始的\v是切換到perl正則模式,這樣括號(hào)、加號(hào)就不需要轉(zhuǎn)義了
BTW 這種文本處理的工作用perl腳本完成是最方便的,vi的好處是可視化調(diào)試,但是遇到大文件就GG了
添加回答
舉報(bào)
0/150
提交
取消