Linux
如何grep具有超過特定數量的特殊字元的行
我想知道從具有超過特定數量的特殊字元的文本中 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'
-n
逐行讀取文件- tr 運算符返回匹配的數量。
要列印少於 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