vim - 一個用vi/shell使用正規表示式進行文字處理的問題
黄舟
黄舟 2017-05-16 16:42:06
0
1
825

需求如下:

輸入檔案input.txt:
a1
a2
a3
a4
b1
b2
a5
b3
b4
b5

要求輸出檔output.txt為:
a1
a4
b1
b2
a5
b3
b5

即去掉第N行,N滿足的條件是:第N行與第N-1、第N+1行的首字母都相同(不去掉首行與末行)。

請問使用vi的替換指令或shell能完成此需求嗎,給點提示也行,謝謝。 (我用C++已經實現了,現在就是想知道能不能用正規表示式實作)

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(1)
黄舟

vim的正規

%s/\v((.).*\n)((.*\n)+)(.*$)//g

分成三段解釋一下

((.).*n)
匹配第一行,外層分組用於替換的時候反向引用,內層分組用於後面判斷

((2.*n)+)
符合接下來 以上一行第一個字母開頭的行(1行或多行)

(2.*$)
符合一行以第一行第一個字母開頭的行

最後 15 把上面符合的所有的行 替換成第一行和最後一行,即刪除中間的行

註:最開始的v是切換到perl正規模式,這樣括號、加號就不需要轉義了

BTW 這種文字處理的工作用perl腳本完成是最方便的,vi的好處是可視化調試,但是遇到大文件就GG了

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!