Я использую ps
, grep
и sed
, чтобы попытаться идентифицировать некоторые процессы Java, которые однозначно идентифицируются каким-либо конкретным аргументом, например -DAppService=DDDABC_456
или -DAppService=DDDXYZ_456_cazorla
.Я хочу вернуть список через запятую: PID,argument,process
Я работаю над CentOS7.Пока я на полпути вниз, но запутался.
Я стреляю из-за этого:
1234,-DAppService=DDDABC_456,/usr/java/jdk1.8.0_112/bin/java
2345,-DAppService=DDDABC_456_cazorla,/usr/java/jdk1.8.0_112/bin/java
3456,-DAppService=DDDXYZ_789,/usr/java/jdk1.8.0_112/bin/java
4567,-DAppService=DDDXYZ_789_cazorla,/usr/java/jdk1.8.0_112/bin/java
Обратите внимание, что аргумент может иметь или не иметь суффиксиз "_cazorla".
Я пробовал это, но он теряет аргументы (и число аргументов может варьироваться, поэтому я не думаю, что я могу продолжить с $ 9, $ 10 и т. д.):
ps -ef | grep DAppService=DDD[A-Z]*_[0-9]*(?:_[a-z]*)? | grep -v grep | awk '{OFS=","; print $2,$8}'
Дает мне:
1234,/usr/java/jdk1.8.0_112/bin/java
2345,/usr/java/jdk1.8.0_112/bin/java
3456,/usr/java/jdk1.8.0_112/bin/java
4567,/usr/java/jdk1.8.0_112/bin/java
Также эта запятая разделяет все результаты столбца grep и все аргументы, которые мне не нужны:
ps -aef | grep DAppService=DDD[A-Z]*_[0-9]*(?:_[a-z]*)? | grep -v grep | sed -e "s/\s\+/,/g"
Слишком много фактического результатаперечислить здесь, но, например,
user,1234,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,2345,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,3456,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
user,4567,1,0,Jul03,pts/0,00:03:21,/usr/java/jdk1.8.0_112/bin/java,arg1,arg2,arg3,argn...
Мои знания в области sed довольно скудны (как и в случае с awk, но в качестве опции это тоже возможно).Когда я доволен командами, я хочу поместить их в скрипт bash, который я могу вызывать из других мест.