2014-09-23 2 views
1

ps 명령에서이 경우 "PS1"을 정의하고 해당 변수가 삭제 될 때까지 모든 것을 갖고 싶습니다.출력까지 모든 것을 제거합니다. var

예 :

ps -ef | grep -i PS1 
cbsuser 1138700  1 0 Sep 15  - 0:10 ./PS1 PS01 3 

예상 출력 : 내 마음에

./PS1 PS01 3 

이 잘못 뭔가있는 것처럼 :

sed 's/^$/ "PS1"/g' 

또는 관련 나는 방법을 잘 모르겠어요 끝내라.

+0

ps -ef는 항상 동일한 구조를 반환하지 않습니다 (날짜와 요일은 시간에 따라 다릅니다). PS1은 프로세스의 사용자 이름 또는 인수에서도 찾을 수 있습니다. PS1은 여러 경로/경로에서 시작할 수 있습니다.) 우리는 그 사건에 대해 어떻게 생각할 수 있습니까? – NeronLeVelu

답변

3
ps -ef | perl -lne 'print $1 if /(\S* PS1 .*)/xi' 
1
ps -ef | grep -i PS1| awk '{ for(i=9;i<=NF;++i)printf "%s ",$i } 
0
ps -ef | grep -i PS1| grep -v grep| awk '{print $(NF-2)" "$(NF-1)" "$NF}' 
0

당신은 pgrep를 사용하여 단순화 할 수 있습니다 :

pgrep -fl PS1 | cut -d ' ' -f2- 
2

당신은 당신 만 필요한 명령을 필터링 할 필요가 그래서 필요한 것만 출력 ps에 대한 사용자 정의 형식을 사용할 수 있습니다 목록에 :

ps e --format %a | grep PS1 

아니면 가능한 경우이 작업을 수행하도록 설계되어 더 나은 사용 pgrep :

pgrep -fl PS1 | cut -f2- -d' ' 
1

당신은이를 사용할 수

ps -eo cmd | grep 'PS1' 
2

몇 가지 옵션을 제공합니다. 이것들은 모두 당신의 명령을 해석합니다. 더 나은 방법은 pgrep 또는 ps에 대한 o 옵션을 사용하는 것입니다하지만 당신이 정말로 구문 분석하려면 :

  1. 그렙 자체

    ps -ef | grep -Po 'PS1.*' 
    
  2. ps -ef | grep -i PS1 | perl -pe 's/.*(?=PS1)//' 
    
  3. 를 나오지도
    ps -ef | sed 's/.*\(PS1.*\)/\1/' 
    
관련 문제