Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于模式的Grep_Bash_Unix_Awk - Fatal编程技术网

Bash 基于模式的Grep

Bash 基于模式的Grep,bash,unix,awk,Bash,Unix,Awk,示例文本: This is a test This is aaaa test This is aaa test This is test a This aa is test 我刚刚开始学习unix命令,如grep、awk和sed,并提出了一个快速问题。如果我的文本文件包含上述文本,我如何打印出使用字母“a”2次或更少的行 我尝试使用awk,但不理解语法,无法将“a”的所有实例相加,只打印包含“a”2次或更少次数的行。我理解比较基于awk'$1这样的列的数字吗 kent$ grep -v

示例文本:

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

我刚刚开始学习unix命令,如grep、awk和sed,并提出了一个快速问题。如果我的文本文件包含上述文本,我如何打印出使用字母“a”2次或更少的行

我尝试使用awk,但不理解语法,无法将“a”的所有实例相加,只打印包含“a”2次或更少次数的行。我理解比较基于awk'$1这样的列的数字吗

kent$  grep  -v 'aaa\+' file      
This is a test
This is test a
This aa is test
更新 我刚才看到了评论,如果您的要求是行中的任何地方,无论是否连续,请参见示例(带awk):

使用
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

哦,如果我不清楚,很抱歉,我不想删除额外的As,而是只打印包含两行或更少As的行。@user3211189我的错,用grep更新了答案,仅从文件中提取/打印这些行。@user3211189编辑注释(线路上的任何地方)@user3211189查看更新。您也可以查看
NF
。@user3211189您在评论中询问了一些问题,但在得到答案后被删除。您可以将您的评论保留在那里吗?这样人们就可以知道发生了什么??2个或更少的连续“a”实例或在线上的任何地方?为什么在发布示例时不这样说,为什么不这样做当有人要求时,我们不会更新它,而你会确认它。
-1
用于此。+1用于筛选出3个或更多连续出现的
'a'
(我们了解到OP正在查找线路上的任何位置)。
kent$  awk -F'a' 'NF<4' f      
1a  a
2a
3
awk '!/aaa+/' file
This is a test
This is test a
This aa is test
sed '/aaa\+/d' file
This is a test
This is test a
This aa is test