没有来自grep或fgrep的输出,-f选项不起作用

时间:2013-05-10 00:56:04

标签: regex linux unix grep

我在文件中有以下正则表达式。顺便说一句,我在SunOS上

Ex:文件模式包含以下行:

Ora-[0-9]
violated

我有一个文件“ datafile ”,其中包含以下内容:

0:/scm/123451/test1.sql:dbuser@database:databasedb:no:yes:ORA-1234|key violated
1:/scm/123451/test1.sql:dbuser@database:databasedb:no:yes:ORA-|key violated
2:/scm/123451/test1_A.sql:dbuser@database:databasedb:no:yes:ORA-|key violated
3:/scm/123451/test1_B.sql:dbuser@database:databasedb:yes:yes:Violated
4.giga:key violated unique:giga
5.fifa:ora-error null value found:giga

现在,我想使用 grep -f fgrep -f 命令来找出与模式文件的正则表达式匹配的行。当模式文件仅包含“Ora- [0-9]”行时,以下两个命令不起作用。

grep -if ./pattern ./datafile
frep -if ./pattern ./datafile

我错过了什么,模式文件中的模式是否需要修复字符串?

2 个答案:

答案 0 :(得分:2)

尝试/usr/xpg4/bin/grep NOT /usr/bin/grep,这就是您的结果。 Solaris /usr/bin中有许多UNIX命令,它们的旧版本具有复古兼容性。 /usr/bin/awk是臭名昭着的。

您可以在默认情况下使用grep命令查看grep:

which grep

您可以在访问/ usr / bin之前将/usr/xpg4/bin放在PATH变量中,以便为您的流程更改此功能。或者使用grep作为/ usr / xpg4 / bin / grep。

的别名

在.profile中添加一个别名(也许是.bashrc,无论如何):

alias grep=/usr/xpg4/bin/grep

更改您的PATH(再次使用.profile或任何地方):

示例旧路径 -

 PATH=/usr/bin:/usr/sbin

示例已更改PATH

PATH=/usr/bin/xpg4/bin:/usr/bin:/usr/sbin

更改PATH会影响现有个人脚本的行为方式,通常是次要但有时令人讨厌的方式。

还要考虑使用egrep -i '(ora|violated)' - 基于您的示例提示。这不需要模式文件。它可以根据您的需要进行多次更改。

答案 1 :(得分:1)

我认为您没有注意到该模式仅与“Ora”匹配,但如果您查看数据文件,则会有“ora”和“ORA”而不是“Ora”。因此,要么包括不区分大小写的匹配,要么纠正模式。

编辑: 道歉,在这里迟到了。我没注意到SunOS。似乎在SunOS上grep实现不同,因为它在我的linux机箱上正常运行。发行Solaris grep?