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, grep
davon ausgegangen wird, dass alles, was mit a beginnt, -
eine Option ist, und versucht, es als solches zu analysieren. In diesem Fall -D
wird verwendet, um Anweisungen grep
zum Umgang mit einer Gerätedatei zu erhalten ( man grep
Einzelheiten 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 myApp
Teil 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 grep
die Ausgabe ps
für so etwas machen, dafür pgrep
ist es da:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grep
Muster mit beginnt-
, müssen Sie es nach der-e
Option einfügen. Andernfalls wird es als Option behandelt. Aber das passt nur zum Wort-Dapp.name
, nicht zum Teil danach.