Você não está mostrando a mensagem de erro que está recebendo, mas provavelmente é
grep: método de dispositivos desconhecidos
Isso ocorre porque, como todos ou pelo menos a maioria dos outros programas de linha de comando, grepassume que qualquer coisa que comece com a -é uma opção e tenta analisá-la como tal. Nesse caso, -Dé usado para instruir grepsobre como lidar com um arquivo de dispositivo (consulte man greppara obter detalhes). Uma maneira de contornar isso é usar o --que informa grepque qualquer coisa a seguir não é um sinalizador de opção.
Combinando isso com a capacidade PCRE do GNU grep, você pode:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
A expressão regular procura por -e a descarta ( \K), depois a sequência Dapp.name=seguida pelo maior número possível de caracteres não espaciais. A saída é:
Dapp.name=myApp
Se você deseja que a myApppeça seja salva em uma variável, eu procuraria apenas isso:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Para atribuí-lo a uma variável:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
No entanto, você nunca deve grepproduzir psesse tipo de coisa, pgrepé para isso:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
greppadrão começar-, você precisará colocá-lo após a-eopção. Caso contrário, será tratado como uma opção. Mas isso apenas corresponderá à palavra-Dapp.name, não à parte posterior.