grep all ORA errors except one ORA error

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

grep -i ORA -v 'ORA-01653' alert.log >>/tmp/ora_errors.txt

-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

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 :slight_smile:

awk '/ORA/&&!/-01653/' alert.log

and a sed variation:

sed '/-01653/d;/ORA/!d' alert.log
sed '/-01653/d;/ORA/!d' alert.log