如何 grep 具有超过特定数量的特殊字符的行

如何 grep 具有超过特定数量的特殊字符的行

我想知道从具有超过特定数量的特殊字符的文本中 grep 行的最佳方法是什么。

假设您已经知道每行有 4 个逗号,,并且您想要 grep 包含超过 4 个逗号的行,

例子

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

输出

catch,me,then,say,hello,then

答案1

Perl解决方案:

perl -ne 'print if tr/,// > 4'
  • -n逐行读取文件
  • tr 运算符返回匹配的数量。

要打印少于 4 行,只需更改><

答案2

使用grep命令:

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

做这个工作。解释:

-E:使用扩展正则表达式...

'(,.*): ... 查找一个逗号后跟任意数量的字符,甚至零个...

{5}':...并重复前面的模式 5 次。

如果你想 grep 少于 4 个逗号的行,你需要:

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

这次,我们需要-x将模式锚定在行的开头和结尾,以便它与整行匹配。我们使用[^,]*代替,.*否则后者会愉快地匹配包含,s 的字符串作为.匹配项任何特点。

-v另一种方法是与之前的方法相反。 “少于 4”与不是“至少 4”,所以:

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

答案3

版本awk

awk -F, 'NF > 5' myfile

答案4

通过以下一行实现的结果


l=`awk 'BEGIN{print }{print gsub(",","")}' example.txt |sed '/^$/d' |awk '$1 > 4 {print NR}'`;sed -n ''$l'p' example.txt  

output
catch,me,then,say,hello,then

相关内容