我敢肯定我在这里做一些明显错误的事情,但是我不知道什么。使用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语法。 - 某些系统具有执行相同操作的
-E
和egrep
。这意味着在那里有grep -E
和egrep
不相同的系统。(悲伤但真实)。 - 一些系统现在使用其标准
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