使用正则表达式进行 grep 搜索
grep search with regex
如何使用 grep 找到恰好包含 3 "w"、5 "t" 而没有 "v" 的行?
Input:
----------
aabbccddd4444
wccwwtttjjttuu
zzxxxwwwmmmnnnn
Expected output:
----------------
wccwwtttjjttuu
因为在 "wccwwtttjjttuu" 中我们有 3 个 "w"、5 个 "t" 而没有 "v"
谢谢!
$ 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
中最后一个元素的索引,所以它的值是元素数减去一个
perl -ne'/v/||y/w/w/d==3&&y/t/t/d==5&&print'
如何使用 grep 找到恰好包含 3 "w"、5 "t" 而没有 "v" 的行?
Input:
----------
aabbccddd4444
wccwwtttjjttuu
zzxxxwwwmmmnnnn
Expected output:
----------------
wccwwtttjjttuu
因为在 "wccwwtttjjttuu" 中我们有 3 个 "w"、5 个 "t" 而没有 "v"
谢谢!
$ 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
中最后一个元素的索引,所以它的值是元素数减去一个
perl -ne'/v/||y/w/w/d==3&&y/t/t/d==5&&print'