ramasar
1
I have a file which contains several lines. Sample content of the file is as below.
OK testmessage email<test@123>
NOK receivemessage email<123@test>
NOK receivemessage email(123@test123)
NOK receivemessage email<abc@test>
i would like to know by scripting will it be possible to retrive just the mail addresses based on string provided, value is 'OK' or 'NOK'.
If i provide search string as 'NOK', i need the output as,
123@test
123@test123
abc@test
please note, email addresses are wrapped in either () or <> brackets.
Please let me know your comments.
p.s: i m new to scripting...
Scott
2
sed -n "/^NOK/s/.*[(<]\(.*\)[)>]/\1/p" infile
123@test
123@test123
abc@test
Or if your awk supports multi-character file-separators:
awk -F"[()<>]" '/^NOK/ { print $2 }' infile
123@test
123@test123
abc@test
zaxxon
3
With sed:
sed -n 's/^NOK.*[<(]\([^>)]*\)[)>].*/\1/p' infile
123@test
123@test123
abc@test
bash
read -p "Enter search string: " search
while read -r a b c
do
case "$a" in
"$search")
c=${c/email/}
echo ${c//[(<)>]/};;
esac
done <"file"
output
$ ./shell.sh
Enter search string: NOK
123@test
123@test123
abc@test
ramasar
5
I am trying with the below content & it is not working.
2008-06-17 15:32 delivery 12473185: failure: NOK:_<test123@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473115: success: OK:_<test121@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473125: failure: NOK:_<test124@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473135: failure: NOK:_<test125@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473145: failure: NOK:_(test126@abc.com)/Thanks/
2008-06-17 15:32 delivery 12473155: success: OK:_<test127@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473165: failure: NOK:_<test128@abc.com>/Thanks/
can you please check this?
Try:
for searching OK
sed -n '/ OK/ { s!.*OK:_[<(]\(.*@.*\)[>)]/Thanks/!\1!p; }' file
for searching NOK
rdcwayx
7
$ awk -F"[()<>]" '/ OK/ {print $(NF-1)}' urfile
test121@abc.com
test127@abc.com
$ awk -F"[()<>]" '/ NOK/ {print $(NF-1)}' urfile
test123@abc.com
test124@abc.com
test125@abc.com
test126@abc.com
test128@abc.com
ramasar
8
hi rdcwayx,
i tried your solution. but its showing all the lines which contain NOK, i would need only email address part.
$ less NOK
2008-06-17 15:32 delivery 12473185: failure: NOK:_<test123@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473115: success: OK:_<test121@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473125: failure: NOK:_<test124@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473135: failure: NOK:_<test125@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473145: failure: NOK:_(test126@abc.com)/Thanks/
2008-06-17 15:32 delivery 12473155: success: OK:_<test127@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473165: failure: NOK:_<test128@abc.com>/Thanks/
$ awk -F"[()<>]" '/ NOK/ {print $(NF-1)}' NOK
2008-06-17 15:32 delivery 12473185: failure: NOK:_<test123@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473125: failure: NOK:_<test124@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473135: failure: NOK:_<test125@abc.com>/Thanks/
2008-06-17 15:32 delivery 12473145: failure: NOK:_(test126@abc.com)/Thanks/
2008-06-17 15:32 delivery 12473165: failure: NOK:_<test128@abc.com>/Thanks/
can you please re-check it...
thanks in advance
if on Solaris, use either /bin/nawk or /usr/xpg4/bin/awk instead of awk
From your post you seem to want both OK and NOK: -
nawk -F"[()<>]" '/ OK| NOK/ {print $(NF-1)}' infile