Sed从输出中删除匹配

时间:2014-11-06 13:54:03

标签: regex bash sed ps

我试图从数字3开始提取进程号。

使用ps | sed "/^\s\+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 个答案:

答案 0 :(得分:2)

您需要添加-n参数以打印与特定模式匹配的行。请注意,基本sed不支持模式\s(用于匹配空格)。

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

OR

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

答案 1 :(得分:2)

听起来sed并不是这项工作的最佳工具。试试awk:

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

这将打印第一列以3开头的所有行。