As expansões de parâmetros da shell podem fazer isso:
$ v="a_link_list_java"
$ printf "%s\n" "${v%_*}" "${v##*_}"
a_link_list
java
Embora observe que, se os padrões na expansão não corresponderem, nada será removido. Portanto, um valor sem sublinhado seria inalterado por ambas as transformações:
$ v=foo
$ printf "%s\n" "${v%_*}" "${v##*_}"
foo
foo