Text-Processing

Vim:計算 char 或 word 的所有出現次數(包括同一行上的多次出現)

  • April 7, 2015

我嘗試用​​ Vim 計算文件中所有出現的字元或單詞。這意味著也應考慮同一行中相同單詞的多次出現。這已經在之前的幾篇文章中討論過:在 Vim 中計算出現次數而不標記緩衝區已更改在 vi 編輯器中搜尋字元串並獲取計數有沒有辦法使用 :g 計算 Vim 中的匹配數?. 我的預設策略是使用:

%s/PATTERN//gn

對於字元和

%s/\<PATTERN\>//gn

的話。Vim 幫助頁面中提到了這一點。但是,似乎兩種解決方案都忽略了同一行中的多次出現。這是一個例子:

UTg    UTg    D1U1K1    UTg    D1U1K2    UTg    D1U1TW01    UTg    D1U1TW02    UTg    D1U1TW03    UTg    D1U1TW04    UTg    D1U1TW05    UTg    D1U1TW06    UTg    D1U1TW07    UTg    D1U1TW08    UTg    D1U1TW09    UTg    D1U1TW10    UTg
UTg    UTg    D1U2K1    UTg    D1U2K2    UTg    D1U2TW01    UTg    D1U2TW02    UTg    D1U2TW03    UTg    D1U2TW04    UTg    D1U2TW05    UTg    D1U2TW06    UTg    D1U2TW07    UTg    D1U2TW08    UTg    D1U2TW09    UTg    D1U2TW10    UTg
UTg    UTg    D1U3K1    UTg    D1U3K2    UTg    D1U3TW01    UTg    D1U3TW02    UTg    D1U3TW03    UTg    D1U3TW04    UTg    D1U3TW05    UTg    D1U3TW06    UTg    D1U3TW07    UTg    D1U3TW08    UTg    D1U3TW09    UTg    D1U3TW10    UTg
UTg    UTg    D1U4K1    UTg    D1U4K2    UTg    D1U4TW01    UTg    D1U4TW02    UTg    D1U4TW03    UTg    D1U4TW04    UTg    D1U4TW05    UTg    D1U4TW06    UTg    D1U4TW07    UTg    D1U4TW08    UTg    D1U4TW09    UTg    D1U4TW10    UTg

使用%s/UTg//gn時它將輸出4而不是56. 那麼如何計算所有出現次數,包括 Vim 中同一行中的多次出現?

預設情況下,可以通過設置啟用替換/g標誌:s

set gdefault

.vimrc. 如果這是使用

:%s/PATTERN/gn

將導致 Vim 每行計算一次字元或單詞的出現次數並忽略所有其他出現次數。要麼使用

:%s/PATTERN/n

在這種情況下或set gdefault.vimrc.

引用自:https://unix.stackexchange.com/questions/194834