Как я могу разобрать вывод `ps` по разным полям?

Если допустима фильтрация на основе procmail, вы можете сделать что-то вроде:

:0
* ^To:.*priv@example.com
{
  :0
   * ^From:.*ali@comp.com
   * ^From:.*ola@test.org
   maildir_to_deliver_to

  :0
  some_other_maildir_or_dev_null
}

(Я сам не пробовал, но если вы убедитесь, вы тщательно протестируете это, прежде чем использовать / dev / null в последнем правиле, чтобы избавиться от «спама».

0
04.12.2018, 23:27
3 ответа

Вы можете сначала заменить несколько пробелов одним пробелом (или любым другим символом ). См. этот вопрос о том, как это сделать. Затем вы можете использовать cut, чтобы выбрать столбец (с ), который вы хотите. См. также этот вопрос .

1
28.01.2020, 02:16

Вы можете явно указать свой собственный разделитель полей в аргументе строки формата при использовании printf()пользовательского стиля вывода -:

$ ps -o '%p,%a,%c,%y'
  PID,COMMAND                   ,COMMAND       ,TTY
15742,ps -o %p,%a,%c,%y         ,ps            ,pts/6
24719,-su                       ,bash          ,pts/6
4
28.01.2020, 02:16

Вы можете использовать тот факт, что оболочка readпомещает ВСЕ остаточные поля в последнюю переменную и печатает COMMAND последней.

ps -eo pid,cmd,tty,args | while read PID CMD TTY ARG; do echo $PID $CMD $TTY $ARG; done

Вы можете передать $ARGв awkили объединить $4... $NFв пределах awkпри прямом чтении вывода ps

1
28.01.2020, 02:16

Теги

Похожие вопросы