犯错(或)以正则表达式



我敢肯定我在这里做一些明显错误的事情,但是我不知道什么。使用bash shell的grep,我有一个文件test.txt:

ABC123
ABC456
ABC789
DEF123
DEF456
DEF789

现在在命令行:

$ grep ABC test2.txt
ABC123
ABC456
ABC789
$ grep DEF test2.txt
DEF123
DEF456
DEF789

所以这些效果很好。现在,我希望以下命令打印整个文件,但是:

$ grep ABC|DEF test2.txt
$ grep (ABC)|(DEF) test2.txt
-bash: syntax error near unexpected token `ABC'
$ grep (ABC)|(DEF) test2.txt
$ grep 'ABC|DEF' test2.txt

我在做什么错?

用-e:

打开扩展的正则延伸正则
grep -E "ABC|DEF" test2.txt

正如其他人指出的那样,标准grep命令不支持语法。不幸的是,从那里开始,事情是mishmash。

  • 某些系统具有提供语法的egrep
  • 某些系统可以使用-E-P(用于Perl)标志扩展GREP语法。
  • 某些系统具有执行相同操作的-Eegrep。这意味着在那里有grep -Eegrep不相同的系统。(悲伤但真实)。
  • 一些系统现在使用其标准grep命令中的扩展正则表达式。显然,您的系统没有。

阅读您的操作以查看系统的支持。有些系统具有用于re_format的操作,可以解释他们支持的内容,并且不支持扩展格式。

然后,您始终可以使用Perl单线:

$ perl -ne "print if /(ABC)|(DEF)/" test.txt

至少您知道所有支持的东西。

我认为标准语法不支持它。您可以使用-P开关(如果有):

grep -P "(ABC|DEF)" test2.txt

而不是使用 egrep,这与使用 grep -E相同:

egrep 'ABC|DEF' test2.txt

相关内容

  • 没有找到相关文章

最新更新