2014-11-06 66 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