2016-10-22 116 views
1

如何找到包含确切3“w”,5“t”和没有“v”与grep的行?使用正则表达式grep搜索

Input: 
---------- 
aabbccddd4444 
wccwwtttjjttuu 
zzxxxwwwmmmnnnn 

Expected output: 
---------------- 
wccwwtttjjttuu 

因为在 “wccwwtttjjttuu” 我们有3个 “W”,5 “T”,并没有 “V”

谢谢!

回答

4
$ cat ip.txt 
aabbccddd4444 
wccwwtttjjttuu 
wvccwwtttjjttuu 
zzxxxwwwmmmnnnn 
ccwwtttjjttuu 


grep,使用扩展的正则表达式和-x选项仅匹配整条线路

$ grep -xE '([^w]*w){3}[^w]*' ip.txt | grep -xE '([^t]*t){5}[^t]*' | grep -v 'v' 
wccwwtttjjttuu 


awk,不知道哪个版本支持{3}正则表达式结构。我上GNU awk 4.1.3

$ awk '/^([^w]*w){3}[^w]*$/ && /^([^t]*t){5}[^t]*$/ && !/v/' ip.txt 
wccwwtttjjttuu 


测试与perl

$ perl -ne '(@w)=/w/g; (@t)=/t/g; (@v)=/v/g; print if $#w==2 && $#t==4 && $#v==-1' ip.txt 
wccwwtttjjttuu 
  • @w, @t, @v阵列包含所有w, t, v字符分别
  • $#w给出最后一个元素的索引在@w,因此它的值是要素数减一个
+0

非常感谢!这是工作 :) –