ps 명령에서 키 값 쌍을 추출하는 방법

ps 명령에서 키 값 쌍을 추출하는 방법

ps다음과 같은 명령에서 애플리케이션 이름을 추출 하려고 합니다 .

ps -af -u sas |grep "java"| grep -v "grep"

다음과 같은 결과가 생성됩니다.

sas 24431     1  0 Oct10 ?        00:51:08 /usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs

사용해 보았지만 egrep작동하지 않는 것 같습니다.

ps -af -u sas|grep "java"| grep -v "grep"| egrep -o "-Dapp.name"

-Dapp.name"myApp" 값만 얻으려면 어떻게 해야 합니까 ?

답변1

받은 오류 메시지는 표시되지 않지만 그럴 수도 있습니다.

grep: 알 수 없는 장치 방법

이는 모든 또는 적어도 대부분의 다른 명령줄 프로그램과 마찬가지로 grepa로 시작하는 모든 것이 -옵션이라고 가정하고 그런 식으로 구문 분석하려고 하기 때문입니다. 이 경우 장치 파일을 처리하는 방법을 -D나타내는 데 사용됩니다 ( 자세한 내용 참조). 이 문제를 해결하는 한 가지 방법은 다음에 오는 내용이 옵션 플래그가 아님을 알려주는 것을 사용하는 것입니다.grepman grep--grep

GNU의 PCRE 기능과 결합하면 grep다음을 수행할 수 있습니다.

ps -af -u sas | grep -v grep | grep -Po -- '*-\KDapp.name=[^\s]+'

정규식은 a를 검색하여 -삭제한 다음( ), 그 다음 \K문자열과 공백이 아닌 문자를 가능한 한 많이 삭제합니다. Dapp.name=출력은 다음과 같습니다

Dapp.name=myApp

myApp부품을 변수에 저장 하려면 별도로 검색하겠습니다.

ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+'

변수에 할당하려면:

$ app="$(ps -af -u sas | grep -v grep | grep -Po -- '-Dapp.name=\K[^\s]+')"
$ echo $app
myApp

그러나 이런 종류의 grep것을 출력 해서는 안됩니다 .pspgrep사용:

app="$(pgrep -a java | grep -Po -- '^Dapp.name=\K[^\s]+')"

답변2

그리고 awk:

ps -af -u sas | awk 'BEGIN {RS=" "}; /-Dapp.name/'

답변3

ps -af -u sas | sed -n '/[j]ava/s/.*-Dapp\.name=\([^ ]*\).*/\1/p'

답변4

다른 답변보다 더 복잡하지만 이는 getopt구문 분석을 처리하는 데 사용됩니다. 또 다른 옵션이 있습니다.

getopt -aql 'Dapp.name:' $(\
    ps -af -u sas | grep java | grep -v grep | tr -s ' ' | cut -d' ' -f8-\
) | cut -d"'" -f2
  1. 당신의 명령:ps -af -u sas | grep java | grep -v grep
  2. tr -s ' '여러 공간을 하나로 "압착"하여 준비cut
  3. cut -d' ' -f8-줄을 공백으로 나누고 8(8 포함) 이후의 모든 필드를 가져오면 결과는 다음과 같습니다./usr/lib/jvm/java-1.7.0-oracle-1.7.0.25.x86_64/jre/bin/java -Denv=DEV -Dapp.name=myApp -Xms512m -Xmx1g -Dlog.dir=/apps/java/logs
  4. getopts -aql 'Dapp.name:' $(...)명령 옵션을 구문 분석하고 Dapp.name값이 있는 사람과 일치하는 긴 이름( 로 표시됨) 만 출력하면 :결과는 다음과 같습니다.--Dapp.name 'myApp' --
  5. cut -d"'" -f2작은따옴표로 콘텐츠 가져오기
  6. 결과 :myApp

관련 정보