2014-09-23 50 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 2014-09-23 09:47:22

回答

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

有幾個選項。這些都解析你的命令。更好的方法是使用pgreppso的選擇,但如果你真的想解析:

  1. 的grep本身

    ps -ef | grep -Po 'PS1.*' 
    
  2. perl的

    ps -ef | grep -i PS1 | perl -pe 's/.*(?=PS1)//' 
    
  3. sed的

    ps -ef | sed 's/.*\(PS1.*\)/\1/'