使用 grep 进行多种搜索模式

问题描述 投票:0回答:6

考虑我有以下数据流:

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

我试过了

grep 'attrib1\|attrib3'
,根据此网站,但没有返回任何内容。
grep attrib1
grep attrib2
确实返回数据,但仅针对指定的单个模式。

unix grep
6个回答
29
投票

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

来自

man
页面:

-e 模式,--regexp=模式
使用 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

23
投票

非常简单的命令:

 bash> grep  "attrib1\|attrib3" <file.name>
attrib1:  someval11
attrib3:  someval13
attrib1:  someval21
attrib3:  someval23
attrib1:  someval31
attrib3:  someval33

19
投票

还有egrep;

egrep "pattern1|pattern2|pattern3" file

1
投票

这适用于 GNU grep 2.6.3

grep "attrib[13]"

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

0
投票

这取决于您所在的 shell。

grep -iw 'patter1\|patter2\|pattern3'
适用于 bash shell,而它不适用于 korn shell。对于 korn shell,我们可能必须尝试
grep -e pattern1 -e patter2
等等。


0
投票

另外,如果有多个模式,请务必将 e 选项作为最后一个选项。例如,

grep -iwe '那个' -e '那个' -e '然后' -e '那些'文本

grep -iwe '那个' -iwe '那个' -e '然后' -e '那些' 文本 或者 grep -wie '那个' -wie '那个' -wie '然后' -wie '那些'文本

有效!但是,如果你把 e 放在第一位,就像

grep -eiw '那个' -e '那个' -e '然后' -e '那些'文本

它返回一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.