Non stai mostrando il messaggio di errore che stai ricevendo ma è probabilmente
grep: metodo di dispositivi sconosciuti
Questo perché, come tutti o almeno la maggior parte degli altri programmi da riga di comando, grep
presuppone che tutto ciò che inizia con a -
sia un'opzione e cerchi di analizzarlo come tale. In questo caso, -D
viene utilizzato per istruire grep
su come gestire un file del dispositivo (vedere man grep
per i dettagli). Un modo per aggirare questo è usare --
che dice grep
che tutto ciò che segue non è un flag di opzione.
Combinandolo con la capacità PCRE di GNU grep
, puoi fare:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
L'espressione regolare cerca a -
e la scarta ( \K
), quindi la stringa Dapp.name=
seguita dal maggior numero possibile di caratteri non spaziali. L'output è:
Dapp.name=myApp
Se si desidera myApp
salvare la parte in una variabile, la cerco da sola:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Per assegnarlo a una variabile:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Tuttavia, non dovresti mai grep
ottenere ps
questo tipo di cose, ecco a cosa pgrep
servono:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grep
modello inizia con-
, è necessario inserirlo dopo l'-e
opzione. Altrimenti, verrà trattata come un'opzione. Ma questo corrisponderà solo alla parola-Dapp.name
, non alla parte successiva.