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, grep
assume que qualquer coisa que comece com a -
é uma opção e tenta analisá-la como tal. Nesse caso, -D
é usado para instruir grep
sobre como lidar com um arquivo de dispositivo (consulte man grep
para obter detalhes). Uma maneira de contornar isso é usar o --
que informa grep
que 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 myApp
peç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 grep
produzir ps
esse tipo de coisa, pgrep
é para isso:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grep
padrão começar-
, você precisará colocá-lo após a-e
opção. Caso contrário, será tratado como uma opção. Mas isso apenas corresponderá à palavra-Dapp.name
, não à parte posterior.