我想知道从具有超过特定数量的特殊字符的文本中 grep 行的最佳方法是什么。
假设您已经知道每行有 4 个逗号,
,并且您想要 grep 包含超过 4 个逗号的行,
例子
hi,hello,how,are,you
catch,me,then,say,hello,then
输出
catch,me,then,say,hello,then
答案1
答案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