使用grep进行多种搜索模式

时间:2012-11-28 17:10:51

标签: unix grep

考虑我有以下数据流:

BODY1
attrib1:  someval11
attrib2:  someval12
attrib3:  someval13

BODY2
attrib1:  someval21
attrib2:  someval22
attrib3:  someval23

BODY3
attrib1:  someval31
attrib2:  someval32
attrib3:  someval33

我想为每个BODY提取仅attrib1和attrib3 ,即

attrib1:  someval11
attrib3:  someval13
attrib1:  someval21
attrib3:  someval23
attrib1:  someval31
attrib3:  someval33

我试过

根据{{​​3}},

grep 'attrib1\|attrib3'但是没有返回任何内容。 grep attrib1grep attrib2会返回数据,但仅针对指定的单一模式。

5 个答案:

答案 0 :(得分:19)

grep -e 'attrib1' -e 'attrib3' file

来自man页面:

  

-e PATTERN, - regexp = PATTERN
                使用PATTERN作为模式。这可以用来指定                 多种搜索模式,或保护以...开头的模式                 连字符( - )。 (-e由POSIX指定。)

修改: 或者,您可以将模式保存在文件中并使用-f选项:

aman@aman-VPCEB14EN:~$ cat>patt
attrib1
attrib3

aman@aman-VPCEB14EN:~$ grep -f patt test
attrib1:  someval11
attrib3:  someval13
attrib1:  someval21
attrib3:  someval23
attrib1:  someval31
attrib3:  someval33

答案 1 :(得分:11)

非常简单的命令:

bash> grep  "attrib1\|attrib3" <file.name>

attrib1: someval11 attrib3: someval13 attrib1: someval21 attrib3: someval23 attrib1: someval31 attrib3: someval33

答案 2 :(得分:10)

也是egrep;

egrep "pattern1|pattern2|pattern3" file

答案 3 :(得分:0)

这适用于GNU grep 2.6.3

grep "attrib[13]"

 grep "^[^0-9]*[13]:"

答案 4 :(得分:0)

这取决于你所使用的shell。 grep -iw 'patter1\|patter2\|pattern3'适用于bash shell,因为它在korn shell上不起作用。对于korn shell,我们可能需要尝试grep -e pattern1 -e patter2等等。