Regex 如何一次对多个模式进行grep?

Regex 如何一次对多个模式进行grep?,regex,bash,grep,Regex,Bash,Grep,我正在寻找两个独立的模式,每个模式在一些大型压缩文件中都有特定的约束。我一辈子都想不出如何同时应对这两种情况 例如,一个文件包含随时间累积的每日记录: 我的文件 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-da

我正在寻找两个独立的模式,每个模式在一些大型压缩文件中都有特定的约束。我一辈子都想不出如何同时应对这两种情况

例如,一个文件包含随时间累积的每日记录:

我的文件

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'

从本质上说,我是在试图找出一年中有多少天,一只狗是快乐的,一只猫是快乐的。我可以进行计数和排序,但我不知道如何运行它,对于a或b使用
(a | b)
进行更改的扩展正则表达式,它是
egrep
grep-E
。注意大写字母E.

您可以使用基本正则表达式:

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

您可以在此处使用
zgrep

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

您可以使用
-e
选项指定多个图案

$ seq 10 | grep -e 5 -e 6
5
6

感谢
-i
提示!接得好!;)然而,我认为
-E
不是必需的…
-E
只允许使用扩展正则表达式,这意味着更少的反斜杠。是的。如果没有
-E
它将是:
zgrep-i'\(Dog\'Cat\)-happy”文件
OSX sed使用-E,GNU也默默地支持它。
grep-E
由指定,因此它应该在任何
grep
中都可用。(您也可以使用
egrep
,尽管官方不赞成使用它。Posix说:“旧的egrep和fgrep命令作为实现扩展可能会在未来的许多年中得到支持,允许历史应用程序不经修改地运行。”
sed
是另一回事。简短而富有表现力!