0

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

例如:文件模式包含以下几行:

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 -ffgrep -f来找出匹配模式文件正则表达式的行。当模式文件仅包含“Ora-[0-9]”行时,以下两个命令不起作用。

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

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

4

2 回答 2

2

尝试/usr/xpg4/bin/grep/usr/bin/grep,这就是您似乎得到结果的原因。Solaris 中有许多旧的 UNIX 命令以/usr/bin实现复古兼容性。/usr/bin/awk是臭名昭著的。

您可以看到默认使用grep命令获得的 grep:

which grep

/usr/xpg4/bin您可以通过在进入 /usr/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)' 根据您的示例使用 -- 建议。这不需要模式文件。可以根据需要进行多次交替。

于 2013-05-10T02:10:22.187 回答
1

我想你没有注意到模式只匹配“Ora”,但是如果你查看你的数据文件,你有一个“ora”和一个“ORA”,但不是“Ora”。因此,要么包括不区分大小写的匹配,要么更正模式。

编辑:抱歉,这里有点晚了。我没有注意到 SunOS。似乎在 SunOS 上的 grep 实现有所不同,因为它在我的 linux 机器上正常运行。Solaris grep 问题?

于 2013-05-10T01:22:43.097 回答