Tente assim:
java -version 2>&1 | grep version | awk '{print $NF}'
Parece que a saída vai para stderr.
Além disso, o grep não é necessário:
java -version 2>&1 | awk '/version/{print $NF}'
Na minha máquina Linux, não está claro para mim por que, se eu fizer o seguinte, não obtenho apenas a string de versão ("1.5.0_32").
# java -version | grep version | awk '{print $NF}'
java version "1.5.0_32"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_32-b05)
Java HotSpot(TM) Server VM (build 1.5.0_32-b05, mixed mode)
Por que não grep
ou awk
funciona?
Só para mostrar que o grep e o awk funcionam em outro exemplo
# echo ' java version "1.5.0_32" ' | grep version | awk '{print $NF}'
"1.5.0_32"