Sie zeigen nicht die Fehlermeldung an, die Sie erhalten, aber es ist wahrscheinlich
grep: Methode für unbekannte Geräte
Dies liegt daran, dass, wie bei allen oder zumindest den meisten anderen Befehlszeilenprogrammen, grepdavon ausgegangen wird, dass alles, was mit a beginnt, -eine Option ist, und versucht, es als solches zu analysieren. In diesem Fall -Dwird verwendet, um Anweisungen grepzum Umgang mit einer Gerätedatei zu erhalten ( man grepEinzelheiten siehe ). Eine Möglichkeit, dies zu --umgehen grep, besteht darin, zu verwenden , dass alles, was folgt, kein Optionsflag ist.
Wenn Sie dies mit der PCRE-Fähigkeit von GNU kombinieren grep, können Sie Folgendes tun:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
Der reguläre Ausdruck sucht nach a -und verwirft es ( \K), dann die Zeichenfolge, Dapp.name=gefolgt von so vielen Nicht-Leerzeichen wie möglich. Die Ausgabe ist:
Dapp.name=myApp
Wenn Sie möchten, dass das myAppTeil in einer Variablen gespeichert wird, würde ich allein danach suchen:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
So weisen Sie es einer Variablen zu:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Sie sollten jedoch niemals grepdie Ausgabe psfür so etwas machen, dafür pgrepist es da:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grepMuster mit beginnt-, müssen Sie es nach der-eOption einfügen. Andernfalls wird es als Option behandelt. Aber das passt nur zum Wort-Dapp.name, nicht zum Teil danach.