如何在Cygwin中的grep中使用正则表达式?

时间:2011-10-24 11:14:18

标签: regex cygwin grep

我需要从单个文件返回两个不同匹配的结果。

grep "string1" my.file

正确返回my.file

中string1的单个实例
grep "string2" my.file

正确返回my.file

中string2的单个实例

grep "string1|string2" my.file

什么都不返回

在正则表达式测试应用程序中语法是否正确,那为什么它不能用于cygwin中的grep?

4 个答案:

答案 0 :(得分:75)

使用|字符而不在基本正则表达式中转义它只会匹配|字面值。例如,如果您有一个包含内容的文件

string1
string2
string1|string2

使用grep "string1|string2" my.file只会匹配最后一行

$ grep "string1|string2" my.file
string1|string2

为了使用交替运算符|,您可以:

  1. 使用基本正则表达式(仅grep)并转义正则表达式中的|字符

    grep "string1\|string2" my.file

  2. 使用egrepgrep -E的扩展正则表达式,正如Julian已在his answer

    中指出的那样

    grep -E "string1|string2" my.file

  3. 如果您要匹配两种不同的模式,您还可以在-e选项中单独指定它们:

    grep -e "string1" -e "string2" my.file

  4. 您可能会发现grep参考的以下部分很有用:

答案 1 :(得分:9)

您可能需要使用egrepgrep -E。管道OR符号是'extended'grep的一部分,基本的Cygwin grep可能不支持。

此外,您可能需要转义管道符号。

答案 2 :(得分:6)

我发现的最好和最清晰的方法是: grep -e REG1 -e REG2 -e REG3 _FILETOGREP _

我从不使用烟斗,因为它不那么明显,也很难开始工作。

答案 3 :(得分:0)

您可以通过阅读精细手册:grep(1)找到这些信息,您可以通过运行'man grep'找到它。它描述了grep和egrep之间的区别,基本和正则表达式,以及关于grep的许多其他有用信息。