You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux Bash:用SED提取ps -ef输出中指定内容后的进程名

用SED提取hostname\process1之后的进程名

当然可以用sed来解决这个问题!刚好sed在处理这种基于字符串匹配的内容截取时非常灵活,完美避开ps输出格式不一致导致awk -f 选项不好用的问题。

核心解决方案

根据你要提取的内容(仅进程名,还是完整的后续命令行),有两种常用写法:

1. 仅提取hostname\process1之后的第一个单词(进程名)

ps -ef | sed -n '/hostname\\process1/s/.*hostname\\process1 *//; s/ .*//p'

2. 提取hostname\process1之后的完整命令行

如果你需要保留进程名后面的所有参数,去掉第二个替换操作即可:

ps -ef | sed -n '/hostname\\process1/s/.*hostname\\process1 *//p'

命令拆解(帮你理解每一步)

  • -n:告诉sed只打印我们明确指定要输出的行,避免输出所有无关的ps结果
  • /hostname\\process1/:只筛选包含hostname\process1的行(注意sed里反斜杠需要转义成\\才能匹配字面量的\)
  • s/.*hostname\\process1 *//:把行开头到hostname\process1的所有内容,以及后面的多余空格全部删除,直接定位到目标内容的起始位置
  • s/ .*//(仅第一种写法):删除第一个空格之后的所有内容,只保留第一个单词(也就是进程名)
  • p:打印处理后的结果行

示例演示

假设ps -ef输出中有这样一行:

john 4567 1234 1 14:32 ? 00:00:02 /usr/local/bin/hostname\process1 nginx -g daemon off;

用第一种命令会输出:

nginx

用第二种命令会输出:

nginx -g daemon off;

为什么这个方法比awk靠谱?

ps的输出格式在不同系统(比如Linux vs BSD)、不同终端环境下可能存在字段数或分隔符的差异,awk的-f依赖固定的字段拆分规则,很容易失效。而sed是基于目标字符串的位置来截取,不管前面的字段怎么变,只要能找到hostname\process1,就能准确提取后面的内容,兼容性更强。

内容的提问来源于stack exchange,提问作者theuniverseisflat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:18:16