Anda tidak menunjukkan pesan kesalahan yang Anda peroleh tetapi itu mungkin
grep: metode perangkat yang tidak dikenal
Itu karena, seperti semua atau setidaknya sebagian besar program baris perintah lainnya, grepmengasumsikan bahwa apa pun yang dimulai dengan a -adalah opsi dan mencoba menguraikannya seperti itu. Dalam hal ini, -Ddigunakan untuk menginstruksikan grepcara menangani file perangkat (lihat man grepdetailnya). Salah satu cara untuk mengatasi ini adalah dengan menggunakan --yang memberitahu grepbahwa apa pun yang mengikuti bukan merupakan flag opsi.
Menggabungkannya dengan kemampuan PCRE dari GNU grep, Anda dapat melakukan:
ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'
Ekspresi reguler mencari -dan membuangnya ( \K), kemudian string Dapp.name=diikuti oleh sebanyak mungkin karakter non-spasi. Outputnya adalah:
Dapp.name=myApp
Jika Anda ingin myAppbagian disimpan dalam variabel, saya akan mencari sendiri:
ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'
Untuk menetapkannya ke variabel:
$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp
Namun, Anda seharusnya tidak pernah grepoutput psuntuk hal semacam ini, itu pgrepuntuk:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
greppola dimulai dengan-, Anda harus meletakkannya setelah-eopsi. Kalau tidak, itu akan diperlakukan sebagai opsi. Tapi itu hanya akan cocok dengan kata-Dapp.name, bukan bagian setelahnya.