Hi - I am trying to grep all "ORA" errors in a log files.I have to grep all ORA errors except one error for example ORA-01653.How can exclude that error in "grep" command?
In following "grep" command I want to exclude "ORA-01653" error
grep -i ORA alert.log >>/tmp/ora_errors.txt
Thanks in advance.
M
ctsgnb
November 5, 2010, 1:18pm
2
grep -i ORA -v 'ORA-01653' alert.log >>/tmp/ora_errors.txt
Scott
November 5, 2010, 3:18pm
3
-i is for ignoring case. All Oracle errors are in upper case.
$ sed -n "/ORA-/{/01653/!p;}"
Thanks for your prompt reply.
I tried both "grep" and "sed" command and "sed" is working fine.
When I tried "grep" command i got following error.
$grep -i ORA -v "ORA-01653" alert.log
grep: can't open -v
grep: can't open ORA-01653
Thanks,
-M
ctsgnb
November 5, 2010, 4:46pm
5
grep ORA alert.log | grep -v ORA-01653
[ctsgnb@shell ~]$ cat alert.log
blablablablabalbala
ORA-01555 blablablabla
blablablablabalbala
ORA-01653 blablablabla
blablablablabalbala
ORA-01234 blablablabla
ORA-09430215 blablablabla
ORA-01653 blablablabla
blablablablabalbala
blablablablabalbala
blablablablabalbala
ORA-09415 blablablabla
[ctsgnb@shell ~]$ grep ORA alert.log|grep -v ORA-01653
ORA-01555 blablablabla
ORA-01234 blablablabla
ORA-09430215 blablablabla
ORA-09415 blablablabla
[ctsgnb@shell ~]$
Or you could use a Perl regular expression with negative lookahead assertion, as shown below with ctsgnb's test file -
$
$
$ cat alert.log
blablablablabalbala
ORA-01555 blablablabla
blablablablabalbala
ORA-01653 blablablabla
blablablablabalbala
ORA-01234 blablablabla
ORA-09430215 blablablabla
ORA-01653 blablablabla
blablablablabalbala
blablablablabalbala
blablablablabalbala
ORA-09415 blablablabla
$
$
$ perl -lne '/^ORA-(?!01653)/ && print' alert.log
ORA-01555 blablablabla
ORA-01234 blablablabla
ORA-09430215 blablablabla
ORA-09415 blablablabla
$
$
tyler_durden
And to complete the list the inevitable awk
awk '/ORA/&&!/-01653/' alert.log
and a sed variation:
sed '/-01653/d;/ORA/!d' alert.log
sed '/-01653/d;/ORA/!d' alert.log