我在文件中有以下正则表达式。顺便说一句,我在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
我错过了什么,模式文件中的模式是否需要修复字符串?
答案 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?