我如何一次grep多个模式?

时间:2015-01-07 21:51:06

标签: regex bash grep

我正在寻找两个单独的模式,每个模式在一些大型压缩文件中都有特定的约束。我不能为我的生活找出如何同时为两个案件进行grep。

例如,文件每日记录随时间累加:

MYFILE

AnimalID-Type-Mood

Animal456-Dog-happy-day1
Animal453-Elephant-happy-day1
Animal896-Dog-sad-day1
Animal405-Dog-angry-day1
Animal443-Goat-angry-day1
Animal453-Dog-sad-day1
Animal473-Cat-sad-day1
Animal452-cat-happy-day1
Animal456-Dog-angry-day2
Animal453-Elephant-sad-day2
Animal896-Dog-happy-day2
Animal405-Dog-angry-day2
Animal443-Goat-happy-day2
Animal453-Dog-happy-day2
Animal473-Cat-happy-day2
Animal452-cat-happy-day2

到目前为止,我已经尝试了

zcat.myfile | grep -e  'Dog|happy' | grep -e 'Cat|happy'

基本上我正试图通过AnimalID找出一年中有多少天,一只狗快乐而一只猫很开心。我可以做些计数和排序,我只是无法弄清楚如何运行

4 个答案:

答案 0 :(得分:4)

您可以使用-e选项

指定多个模式
$ seq 10 | grep -e 5 -e 6
5
6

答案 1 :(得分:3)

您可以在此处使用zgrep

zgrep -iE '(Dog|Cat)-happy' file

答案 2 :(得分:2)

对于扩展正则表达式egrepgrep -E,使用(a|b)对a或b进行更改。注意资本E。

答案 3 :(得分:2)

您可以使用基本正则表达式执行此操作:

grep -i '\(Dog\|Cat\)-happy' input