psと列幅の仕様でgrepを使用する

psと列幅の仕様でgrepを使用する

commandpsを実行するときに列の列幅を制限したい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制限はcommand30文字です。

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

awkを使用すると、pid列形式は幅6に設定され(pidの数字は最大6桁)、列形式は幅10から30userに設定されます。command

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));
}'

関連情報