2016-10-22 207 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

非常感謝!這是工作 :) –