如何使用 Vim 找出某個字元出現次數超過 N 次的所有行

如何使用 Vim 找出某個字元出現次數超過 N 次的所有行

我試圖找到文件中|(管道)字元出現超過 21 次的所有行。該|字元是字段分隔符,因此實例之間可能存在的字元數沒有具體限制|。在 Vim 中有一個簡單的方法可以做到這一點嗎?

注意:我在 Windows 機器上使用 gVim,因此我無法使用任何 *nix 特定技巧。

TIA

答案1

您可以使用正規表示式透過普通搜尋功能來尋找此類行:

/\v(\|[^|]*){21,}

確保\v正規表示式無論選項值如何都有效magic(它使所有非字母數字字元(下劃線除外)變得特殊;我在這裡也使用它以避免必須在(){和之前添加反斜線})。

如果您想一次查看所有此類行,則可以將其與命令結合使用:g

:g/\v(\|[^|]*){21,}/p

順便說一下,這種類型的命令(來自前任的前身) 是該工具名稱的由來grepg/re/p:re 是 regexp 的縮寫)。


如果您的來源資料是“管道分隔”,那麼您可能應該檢查是否有任何值嵌入了管道字元(可以透過轉義(例如,以反斜線為前綴)、加倍或引用來完成)。上面的正規表示式方法可以擴展到涵蓋大多數轉義和加倍方法,但是解析引用的值通常需要比大多數正規表示式語言所能提供的強大表達能力。

相關內容