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
是另一回事。简短而富有表现力!