Можно получить состояния процесса с coreutils ps
$ ps aux
перечислит все это, и т.д. Вот то, как можно декодировать их из страницы справочника:
ОБРАБОТАЙТЕ КОДЫ СОСТОЯНИЯ
Вот различные значения, что s, статистика и указывают, что выходные спецификаторы (заголовок "СТАТИСТИКА" или "S") отобразятся для описания состояния процесса:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced.
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent.
Для форматов BSD и когда ключевое слово статистики используется, могут быть отображены дополнительные символы:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group.
Если CH
должен произойти в начале строки, порядка CH
и au
фиксируется, таким образом, можно искать ^CH.*au
.
$ echo -e 'CH12\nCH23au' | sed '/^CH.*au/s=^=<b>='
CH12
<b>CH23au
$
Если порядок этих двух шаблонов не фиксируется, можно было бы сделать что-то как
sed -e '/pattern1/{;/pattern2/s/old/new/;}'
но решение для жемчуга
perl -pe 'if (/pattern1/ && /pattern2/) {s/old/new/;}'
вероятно, более читаемо.
Другой подход:
sed -e '/^CH/!b' -e '/au/!b' -e 's/^/<b>/'
b
(перейдите в конец, если не, учитывая любой аргумент маркировки), похож continue
или next
на других языках. Таким образом, вышеупомянутое похоже:
for (; line = readline(); print line) { # The implicit loop in sed
if (!/^CH/) continue;
if (!/au/) continue;
line =~ s/^/<b>/
}