Linux

如何grep具有超過特定數量的特殊字元的行

  • September 4, 2020

我想知道從具有超過特定數量的特殊字元的文本中 grep 行的最佳方法是什麼。

假設您已經知道每行有 4 個逗號,,並且您想對超過 4 個逗號的行進行 grep,

例子

hi,hello,how,are,you
catch,me,then,say,hello,then

輸出

catch,me,then,say,hello,then

Perl 解決方案:

perl -ne 'print if tr/,// > 4'

要列印少於 4 的行,只需更改><.

使用grep命令:

grep -E '(,.*){5}' myfile

做這項工作。解釋:

-E: 使用擴展正則表達式…

'(,.*): … 找到一個逗號後跟任意數量的字元,甚至為零…

{5}': … 並重複上一個模式 5 次。

如果您想使用少於 4 個逗號的 grep 行,您需要:

grep -xE '([^,]*,){0,3}[^,]*' myfile

這一次,我們需要-x將模式錨定在行的開頭和結尾,以便與整行匹配。我們使用[^,]*而不是,.*因為後者會很樂意匹配包含,s 的字元串,因為它.匹配任何字元。

-v另一種方法是與以前的方法相反。“少於 4”與“至少 4”是一樣的,所以:

grep -vE '(,.*){4}' myfile

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