Grep基于模式

时间:2014-05-28 22:12:15

标签: bash unix awk

示例文字:

This is a test
This is aaaa test
This is aaa test
This is test a
This aa is test 

我刚开始学习像grep,awk和sed这样的unix命令,并且有一个简单的问题。如果我的文本文件包含上述文本,我怎么能打印出使用字母“a”2次或更少次的行。

我尝试使用awk,但是不理解语法来添加'a'的所有实例并且只打印'a'次数为2次的行。我理解根据awk'$ 1< = 2'等列来比较数字,但不知道如何将它与字符一起使用。任何帮助,将不胜感激。


基本上它应该打印出来:

This is a test
This is test a
This aa is test 

对于Clarity:我不想删除额外的As,而只打印包含两个或更少As的行。

2 个答案:

答案 0 :(得分:2)

像这样?

kent$  grep  -v 'aaa\+' file      
This is a test
This is test a
This aa is test

更新

我刚看到评论,如果您的要求任何地方,无论是否连续,请参阅示例(使用awk):

kent$  cat f
1a  a
2a
3
4a a a aa
5aaaaaaaaaa

kent$  awk 'gsub(/a/,"a")<3' f
1a  a
2a
3

没有gsub

kent$  awk -F'a' 'NF<4' f      
1a  a
2a
3

答案 1 :(得分:2)

使用awk

awk '!/aaa+/' file
This is a test
This is test a
This aa is test

不要同时打印三个或更多a行。


sed

相同
sed '/aaa\+/d' file
This is a test
This is test a
This aa is test

sed的默认值是打印所有行。 /aaa\+/d告诉sed删除包含3个或更多a

的行