Vous n'affichez pas le message d'erreur que vous obtenez, mais il est probablement
grep: méthode des périphériques inconnus
C'est parce que, comme tous ou au moins la plupart des autres programmes de ligne de commande, grepsuppose que tout ce qui commence par un -est une option et essaie de l'analyser en tant que tel. Dans ce cas, -Dest utilisé pour indiquer grepcomment traiter un fichier de périphérique (voir man greppour plus de détails). Une façon de contourner ce problème consiste à utiliser --ce qui indique grepque tout ce qui suit n'est pas un indicateur d'option.
En combinant cela avec la capacité PCRE de GNU grep, vous pouvez faire:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
L'expression régulière recherche un -et le supprime ( \K), puis la chaîne Dapp.name=suivie du plus grand nombre de caractères non espace possible. La sortie est:
Dapp.name=myApp
Si vous voulez que la myApppartie soit enregistrée dans une variable, je rechercherais cela seul:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Pour l'affecter à une variable:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Cependant, vous ne devriez jamais grepproduire de sortie pspour ce genre de chose, c'est pour ça pgrep:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grepmotif commence par-, vous devez le mettre après l'-eoption. Sinon, il sera traité comme une option. Mais cela correspondra simplement au mot-Dapp.name, pas à la partie qui le suit.