2014-11-06 29 views
0

比賽我試圖使用ps | sed "/^\s\+3/"提取有數字3桑達去除輸出

的進程號,我收到一條錯誤消息:sed: -e expression #1, char 8: missing command

我加入一個全球性的標誌:ps | sed "/^\s+3/g"它會成功,但不會向我顯示所有匹配項,它將刪除所有找到的匹配項。

這是不變的輸出:

PID TTY   TIME CMD 
3128 pts/8 00:00:00 bash 
5279 pts/8 00:00:00 ps 
5280 pts/8 00:00:00 sed 

最後,這是輸出我得到: PID TTY TIME CMD

5219 pts/8 00:00:00 ps 
5220 pts/8 00:00:00 sed 

回答

2

您需要添加-n參數打印線它符合特定的模式。並且請注意,基本sed將不支持\s(用於匹配空格)模式。

ps | sed -n '/^ *3/p' 

OR

ps | sed -n '/^[[:blank:]]*3/p' 
+0

從人頁面中的所有行,-n是:抑制模式空間的自動打印。是不是要壓制我們在這裏想要的相反? (順便說一下這個工程,但我很難理解它) – Cubia 2014-11-06 14:06:59

+1

sed逐行讀取輸入。所以它在對特定行進行任何操作之前將行追加到模式空間。如果'/^* 3 /'與ps中存在的行相匹配,則-n和p會自動打印這些行。 – 2014-11-06 14:10:17

+0

另一種方法是'ps | sed'/^* 3 /!d''我嘗試在編輯中添加答案(因爲它太類似於自己的答案,而且問題已關閉),但它被拒絕:( – 2014-11-06 14:55:45

2

這聽起來像sed是不是真的對這份工作的最佳工具。試試AWK:

ps | awk '$1 ~ /^3/' 

這將打印其第一個欄開始3

+0

謝謝,但是使用sed真的是我在這裏尋找的:)無論如何 – Cubia 2014-11-06 13:57:33