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, grep
mengasumsikan bahwa apa pun yang dimulai dengan a -
adalah opsi dan mencoba menguraikannya seperti itu. Dalam hal ini, -D
digunakan untuk menginstruksikan grep
cara menangani file perangkat (lihat man grep
detailnya). Salah satu cara untuk mengatasi ini adalah dengan menggunakan --
yang memberitahu grep
bahwa 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 myApp
bagian 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 grep
output ps
untuk hal semacam ini, itu pgrep
untuk:
app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"
grep
pola dimulai dengan-
, Anda harus meletakkannya setelah-e
opsi. Kalau tidak, itu akan diperlakukan sebagai opsi. Tapi itu hanya akan cocok dengan kata-Dapp.name
, bukan bagian setelahnya.