2014-11-26 2 views
-1

ps 출력에 여러 문자열이 포함 된 Java 프로세스가 있습니다. 나는 단지 그것에서 특정 문자열을 원한다.awk를 사용하여 특정 문자열을 얻습니다.

예를 들어, 내가 원하는

root 5565 7687 0 Nov20 ? 00:00:54 /bin/java -Xms256m -Xmx512m -XX:MaxPermSize=128m -XX:PermSize=256m -XX:MaxPermSize=256m -Dstdout.file=/tmp/std.out -da -Dext.dir.class=profiles/ -Dprocess.name=java1 -Djava.security.policy=security.policy 

그냥 process.name=java1 원하고 ps 출력에서 ​​아무 것도 필요 없다. awk 또는 sed를 사용하여 확실한 방법을 찾을 수 없었습니다.

내가 사용하려고 오전 :

ps -ef | grep java1 | grep -v grep | awk '/process.name/ {print $0}' 

내가 얻을 출력은 ps -ef 밖으로이다.

더 간단한 방법이 있습니까?

+1

출력을 얻는 가장 간단한 방법은'echo "process.name = java1"'입니다. 그게 유용 할 지 의심 스럽지만 2 greps와 awk 스크립트로하고 싶다고 말한 것보다 덜 유용합니다. 따라서 질문을 업데이트하여 정말로 당신이 무엇을하려고하는지 알려면 우리가 도울 수 있습니다. –

+0

@ 에드 모튼 (EdMorton), 문제는 구체적이고 구체적으로 밝혀졌습니다. 편집 할 질문을 어떻게 제안 하시겠습니까? 내가받은 답을 생각해 보면, 그 자체가 문제가되었다고 말할 수 있습니다. 이해할 수있는 능력은 그다지 중요하지 않습니다. 그리고 두 개의 greps는 매우 일반적이며 awk는 내가 시도한 것의 예입니다. 의견을 말하고 투표하기 전에 생각하십시오. –

+0

나는 모튼이 말한 것과 완전히 일치한다. 우리가 당신의 질문을 어떤 식 으로든 해석했기 때문에 많은 사람들이 대답했습니다. 우리가 각자의 의견에서 볼 수 있듯이, 아무 것도 당신에게 작용하지 않았습니다. 따라서 질문에 대한 설명을 얼마나 잘못했는지, 그리고 더 자세한 내용을 묻지 않고 얼마나 빨리 대답하는지 명확하게 설명합니다. – fedorqui

답변

2

하나의 방법입니다

ps -ef | awk -F"process.name" '{split($2,a," ");print FS a[1]}' 
process.name=java1 
+0

고맙습니다. 제가 찾고있는 것이 었습니다. –

1

간단한 방법이있다 : 그러나

ps -ef | grep -o 'process.name=java1' 

grep -o를 사용하는 것 좀 무의미한 것 같다 나로만 출력 (각 프로세스에 대해 한 번 가능성이 여러 번) 문자열 "process.name = Java1을" . 너 정말로 무엇을하려고하는거야?

+0

답장을 보내 주셔서 감사합니다.하지만 여러 프로세스 간의 유일한 공통점은 process.name입니다. Java $ x는 많은 사람들이 만들어 낸 것입니다. –

0

이 일을보십시오 :

여기
ps -ef | grep -o 'process\.name=[a-z0-9]\+' 
+0

이것은 매우 효과적 이었지만 awk을 사용하기를 바랬습니다. 응답 해주셔서 감사합니다! –

0

gnu-awk 사용 :

ps -ef | awk -v s='process.name=' 'BEGIN{RS=s} !RT{print s $0}' 
process.name=java1 -Djava.security.policy=security.policy 
+0

'process.name' 다음에 모든 것이 필요했습니다. 이것으로 나는 단지 1. process.name = java $ x 형태의 여러 프로세스를 가지고있다. 네 고마워. –

+0

ok 업데이트 된 awk 명령을 참조하십시오. – anubhava

0

이 당신이 원하는 것을 할 수 있지만, 더 많은 샘플 입력없이 수 있음 (ps -ef 출력) 및이후에 일치시키려는 내용에 대한 더 나은 설명부호가 하나 더 추측됩니다.

$ sed -r 's#.*[[:space:]]+-D(process\.name=[^[:space:]]+).*#\1#' file 
process.name=java1 
관련 문제