将 grep 与 ps 和列宽规范一起使用

将 grep 与 ps 和列宽规范一起使用

我试图command在运行 ps 时限制列的列宽command,但也尝试将该输出通过管道传输到grep命令中。然而,这是行不通的。

这运行良好:

ps -eo pid,user,command:30

然而,这个:

ps -eo pid,user,command:30 | grep node

给我这个错误:

ps: command:30: keyword not found

实际上,我正在 Mac 上运行 oh-my-zsh,以防万一。

感谢所有帮助;谢谢!

答案1

假设 sed 支持-E,限制command为 30 个字符:

ps -eo pid,user,command |
sed -E 's/^( +[^ ]+ +[^ ]+ +)(.{30}).*$/\1\2/g'

使用 awk,pid列格式设置为宽度 6(假设 pid 最多有 6 位数字),user列格式设置为宽度 10,command到 30:

ps -eo pid,user,command |
awk '{
        line=$0;
        sub(/^ +[^ ]+ +[^ ]+ +/, "", line);
        printf("%6s %s%*s %s\n", $1, substr($2, 0, 10),
                length($2) <= 10 ? 10-length($2) : 0, " ",
                substr(line, 0, 30));
}'

相关内容